Micron Document
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| SparkN0de-git | SparkN0de |
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


Displaying Raw • Download


meshchatx/src/frontend/components/call/CallPage.vue 5c03e9dd8ee29dbae3d48bc7372ad9c6839c6184 (5c03e9dd) Text, 99.84 KB

Tb4b4b4<Tff7b72templateTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex flex-col w-full h-full bg-gray-100 dark:bg-zinc-950" Tb4b4b4:Te6edf3classTff7b72=Ta5d6ff"Tb4b4b4{ Te6edf3darkTff7b72: Te6edf3configTff7b72?Tb4b4b4.Te6edf3theme Tff7b72=== Ta5d6ff'dark' Tb4b4b4}Ta5d6ff"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"w-full h-full overflow-y-auto"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"mx-auto w-full max-w-xl p-4 flex-1 flex flex-col min-h-full"Tb4b4b4>
T8b949e<!-- Tabs -->
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex border-b border-gray-200 dark:border-zinc-800 mb-6 shrink-0"Tb4b4b4>
Tb4b4b4<Tff7b72button
Tb4b4b4:Te6edf3classTff7b72=Ta5d6ff"Tb4b4b4[
Te6edf3activeTab Tff7b72=== Ta5d6ff'phone'
Tff7b72? Ta5d6ff'border-blue-500 text-blue-600 dark:text-blue-400'
Tff7b72: Ta5d6ff'border-transparent text-gray-500 hover:text-gray-700 dark:text-zinc-400 dark:hover:text-zinc-200 hover:border-gray-300'Tb4b4b4,
Tb4b4b4]Ta5d6ff"
Te6edf3classTff7b72=Ta5d6ff"py-2 px-4 border-b-2 font-medium text-sm transition-all"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3activeTab Tff7b72= Ta5d6ff'phone'Ta5d6ff"
Tb4b4b4>
Phone
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tff7b72button
Tb4b4b4:Te6edf3classTff7b72=Ta5d6ff"Tb4b4b4[
Te6edf3activeTab Tff7b72=== Ta5d6ff'voicemail'
Tff7b72? Ta5d6ff'border-blue-500 text-blue-600 dark:text-blue-400'
Tff7b72: Ta5d6ff'border-transparent text-gray-500 hover:text-gray-700 dark:text-zinc-400 dark:hover:text-zinc-200 hover:border-gray-300'Tb4b4b4,
Tb4b4b4]Ta5d6ff"
Te6edf3classTff7b72=Ta5d6ff"py-2 px-4 border-b-2 font-medium text-sm flex items-center gap-2 transition-all"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3activeTab Tff7b72= Ta5d6ff'voicemail'Ta5d6ff"
Tb4b4b4>
Voicemail
Tb4b4b4<Tff7b72span
Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3unreadVoicemailsCount Tff7b72> T79c0ff0Ta5d6ff"
Te6edf3classTff7b72=Ta5d6ff"bg-red-500 text-white text-[10px] px-1.5 py-0.5 rounded-full animate-pulse"
Tb4b4b4>Tff7b72{{ Te6edf3unreadVoicemailsCount Tff7b72}}Tb4b4b4<Tb4b4b4/Tff7b72span
Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tff7b72button
Tb4b4b4:Te6edf3classTff7b72=Ta5d6ff"Tb4b4b4[
Te6edf3activeTab Tff7b72=== Ta5d6ff'contacts'
Tff7b72? Ta5d6ff'border-blue-500 text-blue-600 dark:text-blue-400'
Tff7b72: Ta5d6ff'border-transparent text-gray-500 hover:text-gray-700 dark:text-zinc-400 dark:hover:text-zinc-200 hover:border-gray-300'Tb4b4b4,
Tb4b4b4]Ta5d6ff"
Te6edf3classTff7b72=Ta5d6ff"py-2 px-4 border-b-2 font-medium text-sm transition-all"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3activeTab Tff7b72= Ta5d6ff'contacts'Ta5d6ff"
Tb4b4b4>
Contacts
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tff7b72button
Tb4b4b4:Te6edf3classTff7b72=Ta5d6ff"Tb4b4b4[
Te6edf3activeTab Tff7b72=== Ta5d6ff'ringtone'
Tff7b72? Ta5d6ff'border-blue-500 text-blue-600 dark:text-blue-400'
Tff7b72: Ta5d6ff'border-transparent text-gray-500 hover:text-gray-700 dark:text-zinc-400 dark:hover:text-zinc-200 hover:border-gray-300'Tb4b4b4,
Tb4b4b4]Ta5d6ff"
Te6edf3classTff7b72=Ta5d6ff"py-2 px-4 border-b-2 font-medium text-sm transition-all"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3activeTab Tff7b72= Ta5d6ff'ringtone'Ta5d6ff"
Tb4b4b4>
Tff7b72{{ Te6edf3$tTb4b4b4(Ta5d6ff"call.ringtone"Tb4b4b4) Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>

T8b949e<!-- Phone Tab -->
Tb4b4b4<Tff7b72div Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3activeTab Tff7b72=== Ta5d6ff'phone'Ta5d6ff" Te6edf3classTff7b72=Ta5d6ff"flex-1 flex flex-col"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex items-center justify-between mb-4 px-1"Tb4b4b4>
Tb4b4b4<Tff7b72Toggle
Te6edf3idTff7b72=Ta5d6ff"dnd-toggle"
Tb4b4b4:Te6edf3model-valueTff7b72=Ta5d6ff"Te6edf3configTff7b72?Tb4b4b4.Te6edf3do_not_disturb_enabledTa5d6ff"
Tb4b4b4:Te6edf3labelTff7b72=Ta5d6ff"Te6edf3$tTb4b4b4(Ta5d6ff'call.do_not_disturb'Tb4b4b4)Ta5d6ff"
Tb4b4b4@Te6edf3updateTb4b4b4:Te6edf3model-valueTff7b72=Ta5d6ff"Te6edf3toggleDoNotDisturbTa5d6ff"
Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>

Tb4b4b4<Tff7b72div Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3activeCall Tff7b72|| Te6edf3isCallEndedTa5d6ff" Te6edf3classTff7b72=Ta5d6ff"flex mt-8 mb-12"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"mx-auto min-w-64"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"text-center"Tb4b4b4>
Tb4b4b4<Tff7b72divTb4b4b4>
T8b949e<!-- icon -->
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex mb-4"Tb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3classTff7b72=Ta5d6ff"mx-auto bg-gray-300 dark:bg-zinc-700 text-gray-500 dark:text-gray-400 p-4 rounded-full"
Tb4b4b4:Te6edf3classTff7b72=Ta5d6ff"Tb4b4b4{ Ta5d6ff'animate-pulse'Tff7b72: Te6edf3activeCall Tff7b72&& Te6edf3activeCallTb4b4b4.Te6edf3status Tff7b72=== T79c0ff4 Tb4b4b4}Ta5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72LxmfUserIcon
Te6edf3v-ifTff7b72=Ta5d6ff"Tb4b4b4(Te6edf3activeCall Tff7b72|| Te6edf3lastCallTb4b4b4)Tff7b72?Tb4b4b4.Te6edf3remote_iconTa5d6ff"
Tb4b4b4:Te6edf3icon-nameTff7b72=Ta5d6ff"Tb4b4b4(Te6edf3activeCall Tff7b72|| Te6edf3lastCallTb4b4b4)Tb4b4b4.Te6edf3remote_iconTb4b4b4.Te6edf3icon_nameTa5d6ff"
Tb4b4b4:Te6edf3icon-foreground-colourTff7b72=Ta5d6ff"
Tb4b4b4(Te6edf3activeCall Tff7b72|| Te6edf3lastCallTb4b4b4)Tb4b4b4.Te6edf3remote_iconTb4b4b4.Te6edf3foreground_colour
Ta5d6ff"
Tb4b4b4:Te6edf3icon-background-colourTff7b72=Ta5d6ff"
Tb4b4b4(Te6edf3activeCall Tff7b72|| Te6edf3lastCallTb4b4b4)Tb4b4b4.Te6edf3remote_iconTb4b4b4.Te6edf3background_colour
Ta5d6ff"
Te6edf3classTff7b72=Ta5d6ff"size-12"
Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon Te6edf3v-else Te6edf3icon-nameTff7b72=Ta5d6ff"account" Te6edf3classTff7b72=Ta5d6ff"size-12" Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>

T8b949e<!-- name -->
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"text-xl font-semibold text-gray-500 dark:text-zinc-100 truncate px-4"Tb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3v-ifTff7b72=Ta5d6ff"Tb4b4b4(Te6edf3activeCall Tff7b72|| Te6edf3lastCallTb4b4b4)Tff7b72?Tb4b4b4.Te6edf3remote_identity_name Tff7b72!= Tff7b72nullTa5d6ff"Tb4b4b4>Tff7b72{{
Tb4b4b4(Te6edf3activeCall Tff7b72|| Te6edf3lastCallTb4b4b4)Tb4b4b4.Te6edf3remote_identity_name
Tff7b72}}Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3v-elseTb4b4b4>Tff7b72{{ Te6edf3$tTb4b4b4(Ta5d6ff"call.unknown"Tb4b4b4) Tff7b72}}Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3v-ifTff7b72=Ta5d6ff"Tb4b4b4(Te6edf3activeCall Tff7b72|| Te6edf3lastCallTb4b4b4)Tff7b72?Tb4b4b4.Te6edf3is_contactTa5d6ff"
Te6edf3classTff7b72=Ta5d6ff"text-xs text-blue-600 dark:text-blue-400 font-medium mt-1"
Tb4b4b4>
In contacts
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>

T8b949e<!-- identity hash -->
Tb4b4b4<Tff7b72div
Te6edf3v-ifTff7b72=Ta5d6ff"Tb4b4b4(Te6edf3activeCall Tff7b72|| Te6edf3lastCallTb4b4b4)Tff7b72?Tb4b4b4.Te6edf3remote_identity_hash Tff7b72!= Tff7b72nullTa5d6ff"
Te6edf3classTff7b72=Ta5d6ff"text-gray-500 dark:text-zinc-100 opacity-60 text-sm truncate px-8 font-mono"
Tb4b4b4>
Tff7b72{{
Tb4b4b4(Te6edf3activeCall Tff7b72|| Te6edf3lastCallTb4b4b4)Tb4b4b4.Te6edf3remote_identity_hash
Tff7b72? Te6edf3formatDestinationHashTb4b4b4(Tb4b4b4(Te6edf3activeCall Tff7b72|| Te6edf3lastCallTb4b4b4)Tb4b4b4.Te6edf3remote_identity_hashTb4b4b4)
Tff7b72: Ta5d6ff""
Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>

T8b949e<!-- call status -->
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"text-gray-500 dark:text-zinc-100 mb-4 mt-2"Tb4b4b4>
Tb4b4b4<Tff7b72template Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3wasDeclinedTa5d6ff"Tb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"text-red-500 font-bold animate-pulse"Tb4b4b4>Tff7b72{{
Te6edf3$tTb4b4b4(Ta5d6ff"call.call_declined"Tb4b4b4)
Tff7b72}}Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72templateTb4b4b4>
Tb4b4b4<Tff7b72template Te6edf3v-else-ifTff7b72=Ta5d6ff"Te6edf3isCallEndedTa5d6ff"Tb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"text-red-500 font-bold animate-pulse"Tb4b4b4>Tff7b72{{
Te6edf3$tTb4b4b4(Ta5d6ff"call.call_ended"Tb4b4b4)
Tff7b72}}Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72templateTb4b4b4>
Tb4b4b4<Tff7b72template Te6edf3v-else-ifTff7b72=Ta5d6ff"Te6edf3activeCallTa5d6ff"Tb4b4b4>
Tb4b4b4<Tff7b72span
Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3activeCallTb4b4b4.Te6edf3is_incoming Tff7b72&& Te6edf3activeCallTb4b4b4.Te6edf3status Tff7b72=== T79c0ff4Ta5d6ff"
Te6edf3classTff7b72=Ta5d6ff"animate-bounce inline-block"
Tb4b4b4>Tff7b72{{ Te6edf3$tTb4b4b4(Ta5d6ff"call.incoming_call"Tb4b4b4) Tff7b72}}Tb4b4b4<Tb4b4b4/Tff7b72span
Tb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3v-elseTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3activeCallTb4b4b4.Te6edf3status Tff7b72=== T79c0ff0Ta5d6ff"Tb4b4b4>Busy...Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3v-else-ifTff7b72=Ta5d6ff"Te6edf3activeCallTb4b4b4.Te6edf3status Tff7b72=== T79c0ff1Ta5d6ff"Tb4b4b4>Rejected...Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3v-else-ifTff7b72=Ta5d6ff"Te6edf3activeCallTb4b4b4.Te6edf3status Tff7b72=== T79c0ff2Ta5d6ff"Tb4b4b4>Calling...Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3v-else-ifTff7b72=Ta5d6ff"Te6edf3activeCallTb4b4b4.Te6edf3status Tff7b72=== T79c0ff3Ta5d6ff"Tb4b4b4>Available...Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3v-else-ifTff7b72=Ta5d6ff"Te6edf3activeCallTb4b4b4.Te6edf3status Tff7b72=== T79c0ff4Ta5d6ff"Tb4b4b4>Ringing...Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3v-else-ifTff7b72=Ta5d6ff"Te6edf3activeCallTb4b4b4.Te6edf3status Tff7b72=== T79c0ff5Ta5d6ff"Tb4b4b4>Connecting...Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3v-else-ifTff7b72=Ta5d6ff"Te6edf3activeCallTb4b4b4.Te6edf3status Tff7b72=== T79c0ff6Ta5d6ff" Te6edf3classTff7b72=Ta5d6ff"text-green-500 font-medium"
Tb4b4b4>ConnectedTb4b4b4<Tb4b4b4/Tff7b72span
Tb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3v-elseTb4b4b4>Status: Tff7b72{{ Te6edf3activeCallTb4b4b4.Te6edf3status Tff7b72}}Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72templateTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3activeCall Tff7b72&& Te6edf3activeCallTb4b4b4.Te6edf3status Tff7b72=== T79c0ff6 Tff7b72&& Tff7b72!Te6edf3isCallEnded Tff7b72&& Te6edf3elapsedTimeTa5d6ff"
Te6edf3classTff7b72=Ta5d6ff"text-gray-500 dark:text-zinc-400 mb-4 text-center font-mono text-lg"
Tb4b4b4>
Tff7b72{{ Te6edf3elapsedTime Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3isCallEnded Tff7b72&& Te6edf3callDurationTa5d6ff"
Te6edf3classTff7b72=Ta5d6ff"text-gray-500 dark:text-zinc-400 mb-4 text-center font-mono text-lg"
Tb4b4b4>
Tff7b72{{ Te6edf3callDuration Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>

T8b949e<!-- settings during connected call -->
Tb4b4b4<Tff7b72div Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3activeCall Tff7b72&& Te6edf3activeCallTb4b4b4.Te6edf3status Tff7b72=== T79c0ff6Ta5d6ff" Te6edf3classTff7b72=Ta5d6ff"mb-4"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"w-full"Tb4b4b4>
Tb4b4b4<Tff7b72select
Te6edf3v-modelTff7b72=Ta5d6ff"Te6edf3selectedAudioProfileIdTa5d6ff"
Te6edf3classTff7b72=Ta5d6ff"bg-gray-50 border border-gray-300 text-gray-900 text-sm rounded-lg focus:ring-blue-500 focus:border-blue-500 block w-full p-2.5 dark:bg-zinc-900 dark:border-zinc-600 dark:text-white dark:focus:ring-blue-600 dark:focus:border-blue-600"
Tb4b4b4@Te6edf3changeTff7b72=Ta5d6ff"Te6edf3switchAudioProfileTb4b4b4(Te6edf3selectedAudioProfileIdTb4b4b4)Ta5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72option
Te6edf3v-forTff7b72=Ta5d6ff"Te6edf3audioProfile Tff7b72in Te6edf3audioProfilesTa5d6ff"
Tb4b4b4:Te6edf3keyTff7b72=Ta5d6ff"Te6edf3audioProfileTb4b4b4.Te6edf3idTa5d6ff"
Tb4b4b4:Te6edf3valueTff7b72=Ta5d6ff"Te6edf3audioProfileTb4b4b4.Te6edf3idTa5d6ff"
Tb4b4b4>
Tff7b72{{ Te6edf3audioProfileTb4b4b4.Te6edf3name Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72optionTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72selectTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>

T8b949e<!-- controls during connected call -->
Tb4b4b4<Tff7b72div Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3activeCall Tff7b72&& Te6edf3activeCallTb4b4b4.Te6edf3status Tff7b72=== T79c0ff6Ta5d6ff" Te6edf3classTff7b72=Ta5d6ff"mx-auto space-x-4 mb-8"Tb4b4b4>
T8b949e<!-- mute/unmute mic -->
Tb4b4b4<Tff7b72button
Te6edf3typeTff7b72=Ta5d6ff"button"
Tb4b4b4:Te6edf3titleTff7b72=Ta5d6ff"Te6edf3isMicMuted Tff7b72? Ta5d6ff'Unmute Mic' Tff7b72: Ta5d6ff'Mute Mic'Ta5d6ff"
Tb4b4b4:Te6edf3classTff7b72=Ta5d6ff"Tb4b4b4[
Te6edf3isMicMuted
Tff7b72? Ta5d6ff'bg-red-500 hover:bg-red-400'
Tff7b72: Ta5d6ff'bg-gray-200 dark:bg-zinc-800 text-gray-700 dark:text-zinc-200 hover:bg-gray-300 dark:hover:bg-zinc-700'Tb4b4b4,
Tb4b4b4]Ta5d6ff"
Te6edf3classTff7b72=Ta5d6ff"inline-flex items-center gap-x-1 rounded-full p-4 text-sm font-semibold shadow-sm transition-all duration-200"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3toggleMicrophoneTa5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon
Tb4b4b4:Te6edf3icon-nameTff7b72=Ta5d6ff"Te6edf3isMicMuted Tff7b72? Ta5d6ff'microphone-off' Tff7b72: Ta5d6ff'microphone'Ta5d6ff"
Te6edf3classTff7b72=Ta5d6ff"size-8"
Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>

T8b949e<!-- mute/unmute speaker -->
Tb4b4b4<Tff7b72button
Te6edf3typeTff7b72=Ta5d6ff"button"
Tb4b4b4:Te6edf3titleTff7b72=Ta5d6ff"Te6edf3isSpeakerMuted Tff7b72? Ta5d6ff'Unmute Speaker' Tff7b72: Ta5d6ff'Mute Speaker'Ta5d6ff"
Tb4b4b4:Te6edf3classTff7b72=Ta5d6ff"Tb4b4b4[
Te6edf3isSpeakerMuted
Tff7b72? Ta5d6ff'bg-red-500 hover:bg-red-400'
Tff7b72: Ta5d6ff'bg-gray-200 dark:bg-zinc-800 text-gray-700 dark:text-zinc-200 hover:bg-gray-300 dark:hover:bg-zinc-700'Tb4b4b4,
Tb4b4b4]Ta5d6ff"
Te6edf3classTff7b72=Ta5d6ff"inline-flex items-center gap-x-1 rounded-full p-4 text-sm font-semibold shadow-sm transition-all duration-200"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3toggleSpeakerTa5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon
Tb4b4b4:Te6edf3icon-nameTff7b72=Ta5d6ff"Te6edf3isSpeakerMuted Tff7b72? Ta5d6ff'volume-off' Tff7b72: Ta5d6ff'volume-high'Ta5d6ff"
Te6edf3classTff7b72=Ta5d6ff"size-8"
Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>

T8b949e<!-- toggle stats -->
Tb4b4b4<Tff7b72button
Te6edf3typeTff7b72=Ta5d6ff"button"
Tb4b4b4:Te6edf3classTff7b72=Ta5d6ff"Tb4b4b4[
Te6edf3isShowingStats
Tff7b72? Ta5d6ff'bg-blue-500 text-white'
Tff7b72: Ta5d6ff'bg-gray-200 dark:bg-zinc-800 text-gray-700 dark:text-zinc-200 hover:bg-gray-300 dark:hover:bg-zinc-700'Tb4b4b4,
Tb4b4b4]Ta5d6ff"
Te6edf3classTff7b72=Ta5d6ff"inline-flex items-center gap-x-1 rounded-full p-4 text-sm font-semibold shadow-sm transition-all duration-200"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3isShowingStats Tff7b72= Tff7b72!Te6edf3isShowingStatsTa5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon Te6edf3icon-nameTff7b72=Ta5d6ff"chart-bar" Te6edf3classTff7b72=Ta5d6ff"size-8" Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>

T8b949e<!-- actions -->
Tb4b4b4<Tff7b72div Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3activeCallTa5d6ff" Te6edf3classTff7b72=Ta5d6ff"flex flex-wrap justify-center gap-4 mt-8 mb-4"Tb4b4b4>
T8b949e<!-- answer call -->
Tb4b4b4<Tff7b72button
Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3activeCallTb4b4b4.Te6edf3is_incoming Tff7b72&& Te6edf3activeCallTb4b4b4.Te6edf3status Tff7b72=== T79c0ff4Ta5d6ff"
Tb4b4b4:Te6edf3titleTff7b72=Ta5d6ff"Te6edf3$tTb4b4b4(Ta5d6ff'call.answer_call'Tb4b4b4)Ta5d6ff"
Te6edf3typeTff7b72=Ta5d6ff"button"
Te6edf3classTff7b72=Ta5d6ff"inline-flex items-center gap-x-2 rounded-2xl bg-green-600 px-4 py-2 text-sm font-bold text-white shadow-xl hover:bg-green-500 transition-all duration-200 animate-bounce"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3answerCallTa5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon Te6edf3icon-nameTff7b72=Ta5d6ff"phone" Te6edf3classTff7b72=Ta5d6ff"size-4" Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tff7b72spanTb4b4b4>Tff7b72{{ Te6edf3$tTb4b4b4(Ta5d6ff"call.accept"Tb4b4b4) Tff7b72}}Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>

T8b949e<!-- send to voicemail -->
Tb4b4b4<Tff7b72button
Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3activeCallTb4b4b4.Te6edf3is_incoming Tff7b72&& Te6edf3activeCallTb4b4b4.Te6edf3status Tff7b72=== T79c0ff4Ta5d6ff"
Tb4b4b4:Te6edf3titleTff7b72=Ta5d6ff"Te6edf3$tTb4b4b4(Ta5d6ff'call.send_to_voicemail'Tb4b4b4)Ta5d6ff"
Te6edf3typeTff7b72=Ta5d6ff"button"
Te6edf3classTff7b72=Ta5d6ff"inline-flex items-center gap-x-2 rounded-2xl bg-blue-600 px-4 py-2 text-sm font-bold text-white shadow-xl hover:bg-blue-500 transition-all duration-200"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3sendToVoicemailTa5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon Te6edf3icon-nameTff7b72=Ta5d6ff"voicemail" Te6edf3classTff7b72=Ta5d6ff"size-4" Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tff7b72spanTb4b4b4>Tff7b72{{ Te6edf3$tTb4b4b4(Ta5d6ff"call.send_to_voicemail"Tb4b4b4) Tff7b72}}Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>

T8b949e<!-- hangup/decline call -->
Tb4b4b4<Tff7b72button
Tb4b4b4:Te6edf3titleTff7b72=Ta5d6ff"
Te6edf3activeCallTb4b4b4.Te6edf3is_incoming Tff7b72&& Te6edf3activeCallTb4b4b4.Te6edf3status Tff7b72=== T79c0ff4
Tff7b72? Te6edf3$tTb4b4b4(Ta5d6ff'call.decline_call'Tb4b4b4)
Tff7b72: Te6edf3$tTb4b4b4(Ta5d6ff'call.hangup_call'Tb4b4b4)
Ta5d6ff"
Te6edf3typeTff7b72=Ta5d6ff"button"
Te6edf3classTff7b72=Ta5d6ff"inline-flex items-center gap-x-2 rounded-2xl bg-red-600 px-4 py-2 text-sm font-bold text-white shadow-xl hover:bg-red-500 transition-all duration-200"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3hangupCallTa5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon Te6edf3icon-nameTff7b72=Ta5d6ff"phone-hangup" Te6edf3classTff7b72=Ta5d6ff"size-4 rotate-[135deg]" Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tff7b72spanTb4b4b4>Tff7b72{{
Te6edf3activeCallTb4b4b4.Te6edf3is_incoming Tff7b72&& Te6edf3activeCallTb4b4b4.Te6edf3status Tff7b72=== T79c0ff4
Tff7b72? Te6edf3$tTb4b4b4(Ta5d6ff"call.decline"Tb4b4b4)
Tff7b72: Te6edf3$tTb4b4b4(Ta5d6ff"call.hangup"Tb4b4b4)
Tff7b72}}Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>

T8b949e<!-- stats -->
Tb4b4b4<Tff7b72div
Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3isShowingStatsTa5d6ff"
Te6edf3classTff7b72=Ta5d6ff"mt-4 p-4 text-left bg-gray-200 dark:bg-zinc-800 rounded-lg text-sm text-gray-600 dark:text-zinc-300"
Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"grid grid-cols-2 gap-2"Tb4b4b4>
Tb4b4b4<Tff7b72divTb4b4b4>
TX: Tff7b72{{ Te6edf3activeCallTb4b4b4.Te6edf3tx_packets Tff7b72}} (Tff7b72{{ Te6edf3formatBytesTb4b4b4(Te6edf3activeCallTb4b4b4.Te6edf3tx_bytesTb4b4b4) Tff7b72}})
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72divTb4b4b4>
RX: Tff7b72{{ Te6edf3activeCallTb4b4b4.Te6edf3rx_packets Tff7b72}} (Tff7b72{{ Te6edf3formatBytesTb4b4b4(Te6edf3activeCallTb4b4b4.Te6edf3rx_bytesTb4b4b4) Tff7b72}})
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>

Tb4b4b4<Tff7b72div Te6edf3v-else Te6edf3classTff7b72=Ta5d6ff"mt-8 mb-12"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"text-center mb-4"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"text-xl font-semibold text-gray-500 dark:text-zinc-100"Tb4b4b4>TelephoneTb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"text-gray-500 dark:text-zinc-400"Tb4b4b4>Enter an identity to call.Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>

Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex space-x-2"Tb4b4b4>
Tb4b4b4<Tff7b72input
Te6edf3v-modelTff7b72=Ta5d6ff"Te6edf3destinationHashTa5d6ff"
Te6edf3typeTff7b72=Ta5d6ff"text"
Te6edf3placeholderTff7b72=Ta5d6ff"Identity Hash"
Te6edf3classTff7b72=Ta5d6ff"block w-full rounded-md border-0 py-1.5 text-gray-900 shadow-sm ring-1 ring-inset ring-gray-300 placeholder:text-gray-400 focus:ring-2 focus:ring-inset focus:ring-blue-600 sm:text-sm sm:leading-6 dark:bg-zinc-900 dark:text-zinc-100 dark:ring-zinc-800"
Tb4b4b4@Te6edf3keydownTb4b4b4.Te6edf3enterTff7b72=Ta5d6ff"Te6edf3callTb4b4b4(Te6edf3destinationHashTb4b4b4)Ta5d6ff"
Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tff7b72button
Te6edf3typeTff7b72=Ta5d6ff"button"
Te6edf3classTff7b72=Ta5d6ff"rounded-md bg-blue-600 px-3 py-2 text-sm font-semibold text-white shadow-sm hover:bg-blue-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-blue-600"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3callTb4b4b4(Te6edf3destinationHashTb4b4b4)Ta5d6ff"
Tb4b4b4>
Call
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>

T8b949e<!-- Call History -->
Tb4b4b4<Tff7b72div Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3callHistoryTb4b4b4.Te6edf3length Tff7b72> T79c0ff0 Tff7b72&& Tff7b72!Te6edf3activeCall Tff7b72&& Tff7b72!Te6edf3isCallEndedTa5d6ff" Te6edf3classTff7b72=Ta5d6ff"mt-4"Tb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3classTff7b72=Ta5d6ff"bg-white dark:bg-zinc-900 rounded-xl shadow-sm border border-gray-200 dark:border-zinc-800 overflow-hidden"
Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"px-4 py-3 border-b border-gray-200 dark:border-zinc-800 flex flex-col gap-3"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex justify-between items-center"Tb4b4b4>
Tb4b4b4<Tff7b72h3
Te6edf3classTff7b72=Ta5d6ff"text-sm font-bold text-gray-900 dark:text-white uppercase tracking-wider"
Tb4b4b4>
Call History
Tb4b4b4<Tb4b4b4/Tff7b72h3Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex items-center gap-2"Tb4b4b4>
Tb4b4b4<Tff7b72button
Te6edf3typeTff7b72=Ta5d6ff"button"
Te6edf3classTff7b72=Ta5d6ff"text-[10px] text-gray-400 hover:text-red-500 font-bold uppercase tracking-tighter transition-colors"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3clearHistoryTa5d6ff"
Tb4b4b4>
Tff7b72{{ Te6edf3$tTb4b4b4(Ta5d6ff"app.clear_history"Tb4b4b4) Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon Te6edf3icon-nameTff7b72=Ta5d6ff"history" Te6edf3classTff7b72=Ta5d6ff"size-4 text-gray-400" Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"relative"Tb4b4b4>
Tb4b4b4<Tff7b72input
Te6edf3v-modelTff7b72=Ta5d6ff"Te6edf3callHistorySearchTa5d6ff"
Te6edf3typeTff7b72=Ta5d6ff"text"
Tb4b4b4:Te6edf3placeholderTff7b72=Ta5d6ff"Te6edf3$tTb4b4b4(Ta5d6ff'call.search_history'Tb4b4b4)Ta5d6ff"
Te6edf3classTff7b72=Ta5d6ff"w-full pl-9 pr-4 py-2 bg-gray-50 dark:bg-zinc-800 border border-gray-200 dark:border-zinc-700 rounded-lg text-sm focus:ring-blue-500 focus:border-blue-500 dark:text-white"
Tb4b4b4@Te6edf3inputTff7b72=Ta5d6ff"Te6edf3onCallHistorySearchInputTa5d6ff"
Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon
Te6edf3icon-nameTff7b72=Ta5d6ff"magnify"
Te6edf3classTff7b72=Ta5d6ff"absolute left-3 top-1/2 -translate-y-1/2 size-4 text-gray-400"
Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72ul Te6edf3classTff7b72=Ta5d6ff"divide-y divide-gray-100 dark:divide-zinc-800"Tb4b4b4>
Tb4b4b4<Tff7b72li
Te6edf3v-forTff7b72=Ta5d6ff"Te6edf3entry Tff7b72in Te6edf3callHistoryTa5d6ff"
Tb4b4b4:Te6edf3keyTff7b72=Ta5d6ff"Te6edf3entryTb4b4b4.Te6edf3idTa5d6ff"
Te6edf3classTff7b72=Ta5d6ff"px-4 py-3 hover:bg-gray-50 dark:hover:bg-zinc-800/50 transition-colors"
Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex items-center space-x-3"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"shrink-0"Tb4b4b4>
Tb4b4b4<Tff7b72LxmfUserIcon
Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3entryTb4b4b4.Te6edf3remote_iconTa5d6ff"
Tb4b4b4:Te6edf3icon-nameTff7b72=Ta5d6ff"Te6edf3entryTb4b4b4.Te6edf3remote_iconTb4b4b4.Te6edf3icon_nameTa5d6ff"
Tb4b4b4:Te6edf3icon-foreground-colourTff7b72=Ta5d6ff"Te6edf3entryTb4b4b4.Te6edf3remote_iconTb4b4b4.Te6edf3foreground_colourTa5d6ff"
Tb4b4b4:Te6edf3icon-background-colourTff7b72=Ta5d6ff"Te6edf3entryTb4b4b4.Te6edf3remote_iconTb4b4b4.Te6edf3background_colourTa5d6ff"
Te6edf3classTff7b72=Ta5d6ff"size-8"
Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3v-else
Tb4b4b4:Te6edf3classTff7b72=Ta5d6ff"
Te6edf3entryTb4b4b4.Te6edf3is_incoming
Tff7b72? Ta5d6ff'text-blue-500 bg-blue-50 dark:bg-blue-900/20'
Tff7b72: Ta5d6ff'text-green-500 bg-green-50 dark:bg-green-900/20'
Ta5d6ff"
Te6edf3classTff7b72=Ta5d6ff"size-8 rounded-full flex items-center justify-center"
Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon
Tb4b4b4:Te6edf3icon-nameTff7b72=Ta5d6ff"Te6edf3entryTb4b4b4.Te6edf3is_incoming Tff7b72? Ta5d6ff'phone-incoming' Tff7b72: Ta5d6ff'phone-outgoing'Ta5d6ff"
Te6edf3classTff7b72=Ta5d6ff"size-5"
Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex-1 min-w-0"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex items-center justify-between"Tb4b4b4>
Tb4b4b4<Tff7b72p Te6edf3classTff7b72=Ta5d6ff"text-sm font-semibold text-gray-900 dark:text-white truncate"Tb4b4b4>
Tff7b72{{ Te6edf3entryTb4b4b4.Te6edf3remote_identity_name Tff7b72|| Te6edf3$tTb4b4b4(Ta5d6ff"call.unknown"Tb4b4b4) Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72span
Te6edf3classTff7b72=Ta5d6ff"text-[10px] text-gray-500 dark:text-zinc-500 font-mono ml-2 shrink-0"
Tb4b4b4>
Tff7b72{{ Te6edf3entryTb4b4b4.Te6edf3timestamp Tff7b72? Te6edf3formatDateTimeTb4b4b4(Te6edf3entryTb4b4b4.Te6edf3timestamp Tff7b72* T79c0ff1000Tb4b4b4) Tff7b72: Ta5d6ff"" Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex items-start justify-between mt-0.5"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex-1 min-w-0"Tb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3classTff7b72=Ta5d6ff"flex items-center text-xs text-gray-500 dark:text-zinc-400 space-x-2"
Tb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"capitalize"Tb4b4b4>Tff7b72{{ Te6edf3entryTb4b4b4.Te6edf3status Tff7b72}}Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3entryTb4b4b4.Te6edf3duration_seconds Tff7b72> T79c0ff0Ta5d6ff"
Tb4b4b4>• Tff7b72{{ Te6edf3formatDurationTb4b4b4(Te6edf3entryTb4b4b4.Te6edf3duration_secondsTb4b4b4) Tff7b72}}Tb4b4b4<Tb4b4b4/Tff7b72span
Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3classTff7b72=Ta5d6ff"text-[10px] text-gray-400 dark:text-zinc-600 font-mono truncate mt-0.5"
Tb4b4b4:Te6edf3titleTff7b72=Ta5d6ff"Te6edf3entryTb4b4b4.Te6edf3remote_identity_hashTa5d6ff"
Tb4b4b4>
Tff7b72{{ Te6edf3entryTb4b4b4.Te6edf3remote_identity_hash Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex items-center gap-1"Tb4b4b4>
Tb4b4b4<Tff7b72button
Te6edf3v-ifTff7b72=Ta5d6ff"Tff7b72!Te6edf3entryTb4b4b4.Te6edf3is_contactTa5d6ff"
Te6edf3typeTff7b72=Ta5d6ff"button"
Te6edf3classTff7b72=Ta5d6ff"p-1.5 text-gray-400 hover:text-blue-500 transition-colors"
Tb4b4b4:Te6edf3titleTff7b72=Ta5d6ff"Ta5d6ff'Add to contacts'Ta5d6ff"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3addContactFromHistoryTb4b4b4(Te6edf3entryTb4b4b4)Ta5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon Te6edf3icon-nameTff7b72=Ta5d6ff"account-plus" Te6edf3classTff7b72=Ta5d6ff"size-4" Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tff7b72button
Te6edf3typeTff7b72=Ta5d6ff"button"
Te6edf3classTff7b72=Ta5d6ff"p-1.5 text-gray-400 hover:text-red-500 transition-colors"
Tb4b4b4:Te6edf3titleTff7b72=Ta5d6ff"Te6edf3$tTb4b4b4(Ta5d6ff'common.block'Tb4b4b4)Ta5d6ff"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3blockIdentityTb4b4b4(Te6edf3entryTb4b4b4.Te6edf3remote_identity_hashTb4b4b4)Ta5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon Te6edf3icon-nameTff7b72=Ta5d6ff"account-remove" Te6edf3classTff7b72=Ta5d6ff"size-4" Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tff7b72button
Te6edf3typeTff7b72=Ta5d6ff"button"
Te6edf3classTff7b72=Ta5d6ff"text-[10px] text-blue-500 hover:text-blue-600 font-bold uppercase tracking-tighter"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"
Te6edf3destinationHash Tff7b72= Te6edf3entryTb4b4b4.Te6edf3remote_identity_hashTb4b4b4;
Te6edf3callTb4b4b4(Te6edf3destinationHashTb4b4b4)Tb4b4b4;
Ta5d6ff"
Tb4b4b4>
Tff7b72{{ Te6edf3$tTb4b4b4(Ta5d6ff"call.call_back"Tb4b4b4) Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72ulTb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3hasMoreCallHistoryTa5d6ff"
Te6edf3classTff7b72=Ta5d6ff"p-3 border-t border-gray-100 dark:border-zinc-800 text-center"
Tb4b4b4>
Tb4b4b4<Tff7b72button
Te6edf3typeTff7b72=Ta5d6ff"button"
Te6edf3classTff7b72=Ta5d6ff"text-xs text-blue-500 hover:text-blue-600 font-bold uppercase tracking-widest"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3loadMoreCallHistoryTa5d6ff"
Tb4b4b4>
Tff7b72{{ Te6edf3$tTb4b4b4(Ta5d6ff"call.load_more"Tb4b4b4) Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>

T8b949e<!-- Voicemail Tab -->
Tb4b4b4<Tff7b72div Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3activeTab Tff7b72=== Ta5d6ff'voicemail'Ta5d6ff" Te6edf3classTff7b72=Ta5d6ff"flex-1 flex flex-col"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"mb-4"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"relative"Tb4b4b4>
Tb4b4b4<Tff7b72input
Te6edf3v-modelTff7b72=Ta5d6ff"Te6edf3voicemailSearchTa5d6ff"
Te6edf3typeTff7b72=Ta5d6ff"text"
Te6edf3placeholderTff7b72=Ta5d6ff"Search voicemails..."
Te6edf3classTff7b72=Ta5d6ff"block w-full rounded-lg border-0 py-2 pl-10 text-gray-900 dark:text-white shadow-sm ring-1 ring-inset ring-gray-300 dark:ring-zinc-800 placeholder:text-gray-400 focus:ring-2 focus:ring-inset focus:ring-blue-600 sm:text-sm dark:bg-zinc-900"
Tb4b4b4@Te6edf3inputTff7b72=Ta5d6ff"Te6edf3onVoicemailSearchInputTa5d6ff"
Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"pointer-events-none absolute inset-y-0 left-0 flex items-center pl-3"Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon Te6edf3icon-nameTff7b72=Ta5d6ff"magnify" Te6edf3classTff7b72=Ta5d6ff"size-5 text-gray-400" Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>

T8b949e<!-- Voicemail Settings Card -->
Tb4b4b4<Tff7b72div
Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3configTa5d6ff"
Te6edf3classTff7b72=Ta5d6ff"mb-4 bg-white dark:bg-zinc-900 rounded-xl shadow-sm border border-gray-200 dark:border-zinc-800 overflow-hidden"
Tb4b4b4>
Tb4b4b4<Tff7b72button
Te6edf3typeTff7b72=Ta5d6ff"button"
Te6edf3classTff7b72=Ta5d6ff"w-full px-4 py-3 flex items-center justify-between hover:bg-gray-50 dark:hover:bg-zinc-800/50 transition-colors"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3isVoicemailSettingsExpanded Tff7b72= Tff7b72!Te6edf3isVoicemailSettingsExpandedTa5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex items-center gap-2"Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon Te6edf3icon-nameTff7b72=Ta5d6ff"cog" Te6edf3classTff7b72=Ta5d6ff"size-5 text-blue-500" Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tff7b72h3 Te6edf3classTff7b72=Ta5d6ff"text-sm font-bold text-gray-900 dark:text-white uppercase tracking-wider"Tb4b4b4>
Voicemail Settings
Tb4b4b4<Tb4b4b4/Tff7b72h3Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon
Tb4b4b4:Te6edf3icon-nameTff7b72=Ta5d6ff"Te6edf3isVoicemailSettingsExpanded Tff7b72? Ta5d6ff'chevron-up' Tff7b72: Ta5d6ff'chevron-down'Ta5d6ff"
Te6edf3classTff7b72=Ta5d6ff"size-5 text-gray-400"
Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>

Tb4b4b4<Tff7b72div Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3isVoicemailSettingsExpandedTa5d6ff" Te6edf3classTff7b72=Ta5d6ff"px-4 pb-6 space-y-6"Tb4b4b4>
T8b949e<!-- Status Banner -->
Tb4b4b4<Tff7b72div
Te6edf3v-ifTff7b72=Ta5d6ff"Tff7b72!Te6edf3voicemailStatusTb4b4b4.Te6edf3has_espeak Tff7b72|| Tff7b72!Te6edf3voicemailStatusTb4b4b4.Te6edf3has_ffmpegTa5d6ff"
Te6edf3classTff7b72=Ta5d6ff"p-4 bg-amber-50 dark:bg-amber-900/20 border border-amber-200 dark:border-amber-800 rounded-lg flex gap-3 items-start"
Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon
Te6edf3icon-nameTff7b72=Ta5d6ff"alert"
Te6edf3classTff7b72=Ta5d6ff"size-5 text-amber-600 dark:text-amber-400 shrink-0"
Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"text-xs text-amber-800 dark:text-amber-200"Tb4b4b4>
Tb4b4b4<Tff7b72p Te6edf3classTff7b72=Ta5d6ff"font-bold mb-1"Tb4b4b4>Dependencies MissingTb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72p Te6edf3v-ifTff7b72=Ta5d6ff"Tff7b72!Te6edf3voicemailStatusTb4b4b4.Te6edf3has_espeakTa5d6ff"Tb4b4b4>
Voicemail requires `espeak-ng` to generate greetings. Please install it on your
system.
Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72p
Te6edf3v-ifTff7b72=Ta5d6ff"Tff7b72!Te6edf3voicemailStatusTb4b4b4.Te6edf3has_ffmpegTa5d6ff"
Tb4b4b4:Te6edf3classTff7b72=Ta5d6ff"Tb4b4b4{ Ta5d6ff'mt-1'Tff7b72: Tff7b72!Te6edf3voicemailStatusTb4b4b4.Te6edf3has_espeak Tb4b4b4}Ta5d6ff"
Tb4b4b4>
Voicemail requires `ffmpeg` to process audio files. Please install it on your
system.
Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>

T8b949e<!-- Enabled Toggle -->
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex items-center justify-between"Tb4b4b4>
Tb4b4b4<Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"text-sm font-semibold text-gray-900 dark:text-white"Tb4b4b4>
Enable Voicemail
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"text-xs text-gray-500 dark:text-zinc-400"Tb4b4b4>
Accept calls automatically and record messages
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72button
Tb4b4b4:Te6edf3disabledTff7b72=Ta5d6ff"Tff7b72!Te6edf3voicemailStatusTb4b4b4.Te6edf3has_espeak Tff7b72|| Tff7b72!Te6edf3voicemailStatusTb4b4b4.Te6edf3has_ffmpegTa5d6ff"
Te6edf3classTff7b72=Ta5d6ff"relative inline-flex h-6 w-11 shrink-0 cursor-pointer rounded-full border-2 border-transparent transition-colors duration-200 ease-in-out focus:outline-none disabled:opacity-50 disabled:cursor-not-allowed"
Tb4b4b4:Te6edf3classTff7b72=Ta5d6ff"Te6edf3configTb4b4b4.Te6edf3voicemail_enabled Tff7b72? Ta5d6ff'bg-blue-600' Tff7b72: Ta5d6ff'bg-gray-200 dark:bg-zinc-700'Ta5d6ff"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"
Te6edf3configTb4b4b4.Te6edf3voicemail_enabled Tff7b72= Tff7b72!Te6edf3configTb4b4b4.Te6edf3voicemail_enabledTb4b4b4;
Te6edf3updateConfigTb4b4b4(Tb4b4b4{ Te6edf3voicemail_enabledTff7b72: Te6edf3configTb4b4b4.Te6edf3voicemail_enabled Tb4b4b4}Tb4b4b4)Tb4b4b4;
Ta5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72span
Te6edf3classTff7b72=Ta5d6ff"pointer-events-none inline-block h-5 w-5 transform rounded-full bg-white shadow ring-0 transition duration-200 ease-in-out"
Tb4b4b4:Te6edf3classTff7b72=Ta5d6ff"Te6edf3configTb4b4b4.Te6edf3voicemail_enabled Tff7b72? Ta5d6ff'translate-x-5' Tff7b72: Ta5d6ff'translate-x-0'Ta5d6ff"
Tb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>

T8b949e<!-- Greeting Text -->
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"space-y-2"Tb4b4b4>
Tb4b4b4<Tff7b72label
Te6edf3classTff7b72=Ta5d6ff"text-xs font-bold text-gray-500 dark:text-zinc-400 uppercase tracking-tighter"
Tb4b4b4>Greeting MessageTb4b4b4<Tb4b4b4/Tff7b72label
Tb4b4b4>
Tb4b4b4<Tff7b72textarea
Te6edf3v-modelTff7b72=Ta5d6ff"Te6edf3configTb4b4b4.Te6edf3voicemail_greetingTa5d6ff"
Te6edf3rowsTff7b72=Ta5d6ff"3"
Te6edf3classTff7b72=Ta5d6ff"block w-full rounded-lg border-0 py-2 text-gray-900 dark:text-white shadow-sm ring-1 ring-inset ring-gray-300 dark:ring-zinc-800 placeholder:text-gray-400 focus:ring-2 focus:ring-inset focus:ring-blue-600 sm:text-sm sm:leading-6 dark:bg-zinc-900"
Te6edf3placeholderTff7b72=Ta5d6ff"Enter greeting text..."
Tb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72textareaTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex justify-between items-center"Tb4b4b4>
Tb4b4b4<Tff7b72p Te6edf3classTff7b72=Ta5d6ff"text-[10px] text-gray-500 dark:text-zinc-500"Tb4b4b4>
This text will be converted to speech using eSpeak NG.
Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex gap-2"Tb4b4b4>
Tb4b4b4<Tff7b72button
Tb4b4b4:Te6edf3disabledTff7b72=Ta5d6ff"
Tff7b72!Te6edf3voicemailStatusTb4b4b4.Te6edf3has_espeak Tff7b72||
Tff7b72!Te6edf3voicemailStatusTb4b4b4.Te6edf3has_ffmpeg Tff7b72||
Te6edf3isGeneratingGreeting
Ta5d6ff"
Te6edf3classTff7b72=Ta5d6ff"text-[10px] bg-gray-100 dark:bg-zinc-800 text-gray-700 dark:text-zinc-300 px-3 py-1 rounded-full font-bold hover:bg-gray-200 dark:hover:bg-zinc-700 transition-colors disabled:opacity-50"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"
Te6edf3updateConfigTb4b4b4(Tb4b4b4{ Te6edf3voicemail_greetingTff7b72: Te6edf3configTb4b4b4.Te6edf3voicemail_greeting Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3generateGreetingTb4b4b4(Tb4b4b4)Tb4b4b4;
Ta5d6ff"
Tb4b4b4>
Tff7b72{{ Te6edf3isGeneratingGreeting Tff7b72? Ta5d6ff"Generating..." Tff7b72: Ta5d6ff"Save & Generate" Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>

T8b949e<!-- Custom Greeting Upload -->
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"space-y-2"Tb4b4b4>
Tb4b4b4<Tff7b72label
Te6edf3classTff7b72=Ta5d6ff"text-xs font-bold text-gray-500 dark:text-zinc-400 uppercase tracking-tighter"
Tb4b4b4>Custom Audio GreetingTb4b4b4<Tb4b4b4/Tff7b72label
Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex items-center gap-3 flex-wrap"Tb4b4b4>
Tb4b4b4<Tff7b72input
Te6edf3refTff7b72=Ta5d6ff"greetingUpload"
Te6edf3typeTff7b72=Ta5d6ff"file"
Te6edf3acceptTff7b72=Ta5d6ff"audio/*"
Te6edf3classTff7b72=Ta5d6ff"hidden"
Tb4b4b4@Te6edf3changeTff7b72=Ta5d6ff"Te6edf3uploadGreetingTa5d6ff"
Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tff7b72button
Tb4b4b4:Te6edf3disabledTff7b72=Ta5d6ff"Tff7b72!Te6edf3voicemailStatusTb4b4b4.Te6edf3has_ffmpeg Tff7b72|| Te6edf3isUploadingGreetingTa5d6ff"
Te6edf3classTff7b72=Ta5d6ff"text-xs bg-gray-100 dark:bg-zinc-800 text-gray-700 dark:text-zinc-300 px-4 py-2 rounded-lg font-bold hover:bg-gray-200 dark:hover:bg-zinc-700 transition-colors disabled:opacity-50 flex items-center gap-2"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3$refsTb4b4b4.Te6edf3greetingUploadTb4b4b4.Te6edf3clickTb4b4b4(Tb4b4b4)Ta5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon Te6edf3icon-nameTff7b72=Ta5d6ff"upload" Te6edf3classTff7b72=Ta5d6ff"size-4" Tb4b4b4/Tb4b4b4>
Tff7b72{{ Te6edf3isUploadingGreeting Tff7b72? Ta5d6ff"Uploading..." Tff7b72: Ta5d6ff"Upload Audio File" Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3voicemailStatusTb4b4b4.Te6edf3has_greetingTa5d6ff" Te6edf3classTff7b72=Ta5d6ff"flex items-center gap-2"Tb4b4b4>
Tb4b4b4<Tff7b72button
Te6edf3classTff7b72=Ta5d6ff"text-xs bg-red-100 dark:bg-red-900/30 text-red-600 dark:text-red-400 px-4 py-2 rounded-lg font-bold hover:bg-red-200 dark:hover:bg-red-900/50 transition-colors flex items-center gap-2"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3deleteGreetingTa5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon Te6edf3icon-nameTff7b72=Ta5d6ff"delete" Te6edf3classTff7b72=Ta5d6ff"size-4" Tb4b4b4/Tb4b4b4>
Remove Greeting
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tff7b72button
Te6edf3classTff7b72=Ta5d6ff"text-xs bg-blue-100 dark:bg-blue-900/30 text-blue-600 dark:text-blue-400 px-4 py-2 rounded-lg font-bold hover:bg-blue-200 dark:hover:bg-blue-900/50 transition-colors flex items-center gap-2"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3playGreetingTa5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon
Tb4b4b4:Te6edf3icon-nameTff7b72=Ta5d6ff"Te6edf3isPlayingGreeting Tff7b72? Ta5d6ff'stop' Tff7b72: Ta5d6ff'play'Ta5d6ff"
Te6edf3classTff7b72=Ta5d6ff"size-4"
Tb4b4b4/Tb4b4b4>
Tff7b72{{ Te6edf3isPlayingGreeting Tff7b72? Ta5d6ff"Stop Preview" Tff7b72: Ta5d6ff"Preview" Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3v-else Te6edf3classTff7b72=Ta5d6ff"text-[10px] text-gray-500 dark:text-zinc-500 italic"Tb4b4b4>
No custom greeting uploaded (default text will be used)
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72p Te6edf3classTff7b72=Ta5d6ff"text-[10px] text-gray-500 dark:text-zinc-500"Tb4b4b4>
Supports MP3, OGG, WAV, M4A, FLAC. Will be converted to Opus.
Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>

T8b949e<!-- Delays -->
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"grid grid-cols-2 gap-4"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"space-y-2"Tb4b4b4>
Tb4b4b4<Tff7b72label
Te6edf3classTff7b72=Ta5d6ff"text-xs font-bold text-gray-500 dark:text-zinc-400 uppercase tracking-tighter"
Tb4b4b4>Answer Delay (s)Tb4b4b4<Tb4b4b4/Tff7b72label
Tb4b4b4>
Tb4b4b4<Tff7b72input
Te6edf3v-modelTb4b4b4.Te6edf3numberTff7b72=Ta5d6ff"Te6edf3configTb4b4b4.Te6edf3voicemail_auto_answer_delay_secondsTa5d6ff"
Te6edf3typeTff7b72=Ta5d6ff"number"
Te6edf3minTff7b72=Ta5d6ff"1"
Te6edf3maxTff7b72=Ta5d6ff"120"
Te6edf3classTff7b72=Ta5d6ff"block w-full rounded-lg border-0 py-1.5 text-gray-900 dark:text-white shadow-sm ring-1 ring-inset ring-gray-300 dark:ring-zinc-800 focus:ring-2 focus:ring-inset focus:ring-blue-600 sm:text-sm dark:bg-zinc-900"
Tb4b4b4@Te6edf3changeTff7b72=Ta5d6ff"
Te6edf3updateConfigTb4b4b4(Tb4b4b4{
Te6edf3voicemail_auto_answer_delay_secondsTff7b72:
Te6edf3configTb4b4b4.Te6edf3voicemail_auto_answer_delay_secondsTb4b4b4,
Tb4b4b4}Tb4b4b4)
Ta5d6ff"
Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"space-y-2"Tb4b4b4>
Tb4b4b4<Tff7b72label
Te6edf3classTff7b72=Ta5d6ff"text-xs font-bold text-gray-500 dark:text-zinc-400 uppercase tracking-tighter"
Tb4b4b4>Max Recording (s)Tb4b4b4<Tb4b4b4/Tff7b72label
Tb4b4b4>
Tb4b4b4<Tff7b72input
Te6edf3v-modelTb4b4b4.Te6edf3numberTff7b72=Ta5d6ff"Te6edf3configTb4b4b4.Te6edf3voicemail_max_recording_secondsTa5d6ff"
Te6edf3typeTff7b72=Ta5d6ff"number"
Te6edf3minTff7b72=Ta5d6ff"5"
Te6edf3maxTff7b72=Ta5d6ff"600"
Te6edf3classTff7b72=Ta5d6ff"block w-full rounded-lg border-0 py-1.5 text-gray-900 dark:text-white shadow-sm ring-1 ring-inset ring-gray-300 dark:ring-zinc-800 focus:ring-2 focus:ring-inset focus:ring-blue-600 sm:text-sm dark:bg-zinc-900"
Tb4b4b4@Te6edf3changeTff7b72=Ta5d6ff"
Te6edf3updateConfigTb4b4b4(Tb4b4b4{
Te6edf3voicemail_max_recording_secondsTff7b72: Te6edf3configTb4b4b4.Te6edf3voicemail_max_recording_secondsTb4b4b4,
Tb4b4b4}Tb4b4b4)
Ta5d6ff"
Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>

Tb4b4b4<Tff7b72div Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3voicemailsTb4b4b4.Te6edf3length Tff7b72=== T79c0ff0Ta5d6ff" Te6edf3classTff7b72=Ta5d6ff"my-auto text-center"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"bg-gray-200 dark:bg-zinc-800 p-6 rounded-full inline-block mb-4"Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon Te6edf3icon-nameTff7b72=Ta5d6ff"voicemail" Te6edf3classTff7b72=Ta5d6ff"size-12 text-gray-400" Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72h3 Te6edf3classTff7b72=Ta5d6ff"text-lg font-medium text-gray-900 dark:text-white"Tb4b4b4>No VoicemailsTb4b4b4<Tb4b4b4/Tff7b72h3Tb4b4b4>
Tb4b4b4<Tff7b72p Te6edf3classTff7b72=Ta5d6ff"text-gray-500 dark:text-zinc-400"Tb4b4b4>
When people leave you messages, they'll show up here.
Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>

Tb4b4b4<Tff7b72div Te6edf3v-else Te6edf3classTff7b72=Ta5d6ff"space-y-4"Tb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3classTff7b72=Ta5d6ff"bg-white dark:bg-zinc-900 rounded-xl shadow-sm border border-gray-200 dark:border-zinc-800 overflow-hidden"
Tb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3classTff7b72=Ta5d6ff"px-4 py-3 border-b border-gray-200 dark:border-zinc-800 flex justify-between items-center"
Tb4b4b4>
Tb4b4b4<Tff7b72h3 Te6edf3classTff7b72=Ta5d6ff"text-sm font-bold text-gray-900 dark:text-white uppercase tracking-wider"Tb4b4b4>
Voicemail Inbox
Tb4b4b4<Tb4b4b4/Tff7b72h3Tb4b4b4>
Tb4b4b4<Tff7b72span
Te6edf3classTff7b72=Ta5d6ff"text-[10px] bg-blue-100 text-blue-600 dark:bg-blue-900/30 dark:text-blue-400 px-2 py-0.5 rounded-full font-bold uppercase"
Tb4b4b4>
Tff7b72{{ Te6edf3voicemailsTb4b4b4.Te6edf3length Tff7b72}} Messages
Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72ul Te6edf3classTff7b72=Ta5d6ff"divide-y divide-gray-100 dark:divide-zinc-800"Tb4b4b4>
Tb4b4b4<Tff7b72li
Te6edf3v-forTff7b72=Ta5d6ff"Te6edf3voicemail Tff7b72in Te6edf3voicemailsTa5d6ff"
Tb4b4b4:Te6edf3keyTff7b72=Ta5d6ff"Te6edf3voicemailTb4b4b4.Te6edf3idTa5d6ff"
Te6edf3classTff7b72=Ta5d6ff"px-4 py-4 hover:bg-gray-50 dark:hover:bg-zinc-800/50 transition-colors"
Tb4b4b4:Te6edf3classTff7b72=Ta5d6ff"Tb4b4b4{ Ta5d6ff'bg-blue-50/50 dark:bg-blue-900/10'Tff7b72: Tff7b72!Te6edf3voicemailTb4b4b4.Te6edf3is_read Tb4b4b4}Ta5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex items-start space-x-4"Tb4b4b4>
T8b949e<!-- Icon / Play/Pause Button -->
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"relative shrink-0"Tb4b4b4>
Tb4b4b4<Tff7b72LxmfUserIcon
Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3voicemailTb4b4b4.Te6edf3remote_iconTa5d6ff"
Tb4b4b4:Te6edf3icon-nameTff7b72=Ta5d6ff"Te6edf3voicemailTb4b4b4.Te6edf3remote_iconTb4b4b4.Te6edf3icon_nameTa5d6ff"
Tb4b4b4:Te6edf3icon-foreground-colourTff7b72=Ta5d6ff"Te6edf3voicemailTb4b4b4.Te6edf3remote_iconTb4b4b4.Te6edf3foreground_colourTa5d6ff"
Tb4b4b4:Te6edf3icon-background-colourTff7b72=Ta5d6ff"Te6edf3voicemailTb4b4b4.Te6edf3remote_iconTb4b4b4.Te6edf3background_colourTa5d6ff"
Te6edf3classTff7b72=Ta5d6ff"size-10"
Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3v-else
Te6edf3classTff7b72=Ta5d6ff"size-10 rounded-full bg-gray-200 dark:bg-zinc-800 flex items-center justify-center text-gray-400"
Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon Te6edf3icon-nameTff7b72=Ta5d6ff"account" Te6edf3classTff7b72=Ta5d6ff"size-6" Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>

Tb4b4b4<Tff7b72button
Te6edf3classTff7b72=Ta5d6ff"absolute inset-0 size-10 rounded-full flex items-center justify-center transition-all opacity-0 hover:opacity-100 bg-black/20 text-white"
Tb4b4b4:Te6edf3classTff7b72=Ta5d6ff"Tb4b4b4{
Ta5d6ff'opacity-100 bg-red-500/80 animate-pulse'Tff7b72:
Te6edf3playingVoicemailId Tff7b72=== Te6edf3voicemailTb4b4b4.Te6edf3idTb4b4b4,
Tb4b4b4}Ta5d6ff"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3playVoicemailTb4b4b4(Te6edf3voicemailTb4b4b4)Ta5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon
Tb4b4b4:Te6edf3icon-nameTff7b72=Ta5d6ff"Te6edf3playingVoicemailId Tff7b72=== Te6edf3voicemailTb4b4b4.Te6edf3id Tff7b72? Ta5d6ff'stop' Tff7b72: Ta5d6ff'play'Ta5d6ff"
Te6edf3classTff7b72=Ta5d6ff"size-6"
Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>

Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex-1 min-w-0"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex items-center justify-between mb-1"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex items-center min-w-0 mr-2"Tb4b4b4>
Tb4b4b4<Tff7b72p Te6edf3classTff7b72=Ta5d6ff"text-sm font-bold text-gray-900 dark:text-white truncate"Tb4b4b4>
Tff7b72{{ Te6edf3voicemailTb4b4b4.Te6edf3remote_identity_name Tff7b72|| Te6edf3$tTb4b4b4(Ta5d6ff"call.unknown"Tb4b4b4) Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72span
Te6edf3v-ifTff7b72=Ta5d6ff"Tff7b72!Te6edf3voicemailTb4b4b4.Te6edf3is_readTa5d6ff"
Te6edf3classTff7b72=Ta5d6ff"ml-2 shrink-0 size-2 inline-block rounded-full bg-blue-500"
Tb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72span
Te6edf3classTff7b72=Ta5d6ff"text-[10px] text-gray-500 dark:text-zinc-500 font-mono shrink-0"
Tb4b4b4>
Tff7b72{{ Te6edf3formatDateTimeTb4b4b4(Te6edf3voicemailTb4b4b4.Te6edf3timestamp Tff7b72* T79c0ff1000Tb4b4b4) Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>

Tb4b4b4<Tff7b72div
Te6edf3classTff7b72=Ta5d6ff"flex items-center text-xs text-gray-500 dark:text-zinc-400 space-x-3 mb-3"
Tb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"flex items-center gap-1"Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon Te6edf3icon-nameTff7b72=Ta5d6ff"clock-outline" Te6edf3classTff7b72=Ta5d6ff"size-3" Tb4b4b4/Tb4b4b4>
Tff7b72{{ Te6edf3formatDurationTb4b4b4(Te6edf3voicemailTb4b4b4.Te6edf3duration_secondsTb4b4b4) Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span
Te6edf3classTff7b72=Ta5d6ff"opacity-60 font-mono text-[10px] truncate"
Tb4b4b4:Te6edf3titleTff7b72=Ta5d6ff"Te6edf3voicemailTb4b4b4.Te6edf3remote_identity_hashTa5d6ff"
Tb4b4b4>Tff7b72{{ Te6edf3formatDestinationHashTb4b4b4(Te6edf3voicemailTb4b4b4.Te6edf3remote_identity_hashTb4b4b4) Tff7b72}}Tb4b4b4<Tb4b4b4/Tff7b72span
Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>

Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex items-center gap-4"Tb4b4b4>
Tb4b4b4<Tff7b72button
Te6edf3typeTff7b72=Ta5d6ff"button"
Te6edf3classTff7b72=Ta5d6ff"text-[10px] flex items-center gap-1 text-blue-500 hover:text-blue-600 font-bold uppercase tracking-wider transition-colors"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"
Te6edf3destinationHash Tff7b72= Te6edf3voicemailTb4b4b4.Te6edf3remote_identity_hashTb4b4b4;
Te6edf3activeTab Tff7b72= Ta5d6ff'phone'Tb4b4b4;
Te6edf3callTb4b4b4(Te6edf3destinationHashTb4b4b4)Tb4b4b4;
Ta5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon Te6edf3icon-nameTff7b72=Ta5d6ff"phone" Te6edf3classTff7b72=Ta5d6ff"size-3" Tb4b4b4/Tb4b4b4>
Call Back
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tff7b72button
Te6edf3typeTff7b72=Ta5d6ff"button"
Te6edf3classTff7b72=Ta5d6ff"text-[10px] flex items-center gap-1 text-red-500 hover:text-red-600 font-bold uppercase tracking-wider transition-colors"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3deleteVoicemailTb4b4b4(Te6edf3voicemailTb4b4b4.Te6edf3idTb4b4b4)Ta5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon Te6edf3icon-nameTff7b72=Ta5d6ff"delete" Te6edf3classTff7b72=Ta5d6ff"size-3" Tb4b4b4/Tb4b4b4>
Delete
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72ulTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>

T8b949e<!-- Contacts Tab -->
Tb4b4b4<Tff7b72div Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3activeTab Tff7b72=== Ta5d6ff'contacts'Ta5d6ff" Te6edf3classTff7b72=Ta5d6ff"flex-1 flex flex-col"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"mb-4 flex gap-2"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"relative flex-1"Tb4b4b4>
Tb4b4b4<Tff7b72input
Te6edf3v-modelTff7b72=Ta5d6ff"Te6edf3contactsSearchTa5d6ff"
Te6edf3typeTff7b72=Ta5d6ff"text"
Te6edf3placeholderTff7b72=Ta5d6ff"Search contacts..."
Te6edf3classTff7b72=Ta5d6ff"block w-full rounded-lg border-0 py-2 pl-10 text-gray-900 dark:text-white shadow-sm ring-1 ring-inset ring-gray-300 dark:ring-zinc-800 placeholder:text-gray-400 focus:ring-2 focus:ring-inset focus:ring-blue-600 sm:text-sm dark:bg-zinc-900"
Tb4b4b4@Te6edf3inputTff7b72=Ta5d6ff"Te6edf3onContactsSearchInputTa5d6ff"
Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"pointer-events-none absolute inset-y-0 left-0 flex items-center pl-3"Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon Te6edf3icon-nameTff7b72=Ta5d6ff"magnify" Te6edf3classTff7b72=Ta5d6ff"size-5 text-gray-400" Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72button
Te6edf3typeTff7b72=Ta5d6ff"button"
Te6edf3classTff7b72=Ta5d6ff"rounded-lg bg-blue-600 px-3 py-2 text-sm font-semibold text-white shadow-sm hover:bg-blue-500 transition-colors flex items-center gap-2"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3openAddContactModalTa5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon Te6edf3icon-nameTff7b72=Ta5d6ff"plus" Te6edf3classTff7b72=Ta5d6ff"size-5" Tb4b4b4/Tb4b4b4>
Add
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>

Tb4b4b4<Tff7b72div Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3contactsTb4b4b4.Te6edf3length Tff7b72=== T79c0ff0Ta5d6ff" Te6edf3classTff7b72=Ta5d6ff"my-auto text-center"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"bg-gray-200 dark:bg-zinc-800 p-6 rounded-full inline-block mb-4"Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon Te6edf3icon-nameTff7b72=Ta5d6ff"account-multiple" Te6edf3classTff7b72=Ta5d6ff"size-12 text-gray-400" Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72h3 Te6edf3classTff7b72=Ta5d6ff"text-lg font-medium text-gray-900 dark:text-white"Tb4b4b4>No ContactsTb4b4b4<Tb4b4b4/Tff7b72h3Tb4b4b4>
Tb4b4b4<Tff7b72p Te6edf3classTff7b72=Ta5d6ff"text-gray-500 dark:text-zinc-400"Tb4b4b4>Add contacts to quickly call them.Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>

Tb4b4b4<Tff7b72div Te6edf3v-else Te6edf3classTff7b72=Ta5d6ff"space-y-4"Tb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3classTff7b72=Ta5d6ff"bg-white dark:bg-zinc-900 rounded-xl shadow-sm border border-gray-200 dark:border-zinc-800 overflow-hidden"
Tb4b4b4>
Tb4b4b4<Tff7b72ul Te6edf3classTff7b72=Ta5d6ff"divide-y divide-gray-100 dark:divide-zinc-800"Tb4b4b4>
Tb4b4b4<Tff7b72li
Te6edf3v-forTff7b72=Ta5d6ff"Te6edf3contact Tff7b72in Te6edf3contactsTa5d6ff"
Tb4b4b4:Te6edf3keyTff7b72=Ta5d6ff"Te6edf3contactTb4b4b4.Te6edf3idTa5d6ff"
Te6edf3classTff7b72=Ta5d6ff"px-4 py-3 hover:bg-gray-50 dark:hover:bg-zinc-800/50 transition-colors"
Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex items-center space-x-3"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"shrink-0"Tb4b4b4>
Tb4b4b4<Tff7b72LxmfUserIcon
Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3contactTb4b4b4.Te6edf3remote_iconTa5d6ff"
Tb4b4b4:Te6edf3icon-nameTff7b72=Ta5d6ff"Te6edf3contactTb4b4b4.Te6edf3remote_iconTb4b4b4.Te6edf3icon_nameTa5d6ff"
Tb4b4b4:Te6edf3icon-foreground-colourTff7b72=Ta5d6ff"Te6edf3contactTb4b4b4.Te6edf3remote_iconTb4b4b4.Te6edf3foreground_colourTa5d6ff"
Tb4b4b4:Te6edf3icon-background-colourTff7b72=Ta5d6ff"Te6edf3contactTb4b4b4.Te6edf3remote_iconTb4b4b4.Te6edf3background_colourTa5d6ff"
Te6edf3classTff7b72=Ta5d6ff"size-10"
Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3v-else
Te6edf3classTff7b72=Ta5d6ff"size-10 rounded-full bg-blue-50 dark:bg-blue-900/20 text-blue-500 flex items-center justify-center"
Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon Te6edf3icon-nameTff7b72=Ta5d6ff"account" Te6edf3classTff7b72=Ta5d6ff"size-6" Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex-1 min-w-0"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex items-center justify-between"Tb4b4b4>
Tb4b4b4<Tff7b72p Te6edf3classTff7b72=Ta5d6ff"text-sm font-bold text-gray-900 dark:text-white truncate"Tb4b4b4>
Tff7b72{{ Te6edf3contactTb4b4b4.Te6edf3name Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex items-center gap-1"Tb4b4b4>
Tb4b4b4<Tff7b72button
Te6edf3typeTff7b72=Ta5d6ff"button"
Te6edf3classTff7b72=Ta5d6ff"p-1.5 text-gray-400 hover:text-blue-500 transition-colors"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3openEditContactModalTb4b4b4(Te6edf3contactTb4b4b4)Ta5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon Te6edf3icon-nameTff7b72=Ta5d6ff"pencil" Te6edf3classTff7b72=Ta5d6ff"size-4" Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tff7b72button
Te6edf3typeTff7b72=Ta5d6ff"button"
Te6edf3classTff7b72=Ta5d6ff"p-1.5 text-gray-400 hover:text-red-500 transition-colors"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3deleteContactTb4b4b4(Te6edf3contactTb4b4b4.Te6edf3idTb4b4b4)Ta5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon Te6edf3icon-nameTff7b72=Ta5d6ff"delete" Te6edf3classTff7b72=Ta5d6ff"size-4" Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex items-center justify-between mt-1"Tb4b4b4>
Tb4b4b4<Tff7b72span
Te6edf3classTff7b72=Ta5d6ff"text-[10px] text-gray-500 dark:text-zinc-500 font-mono truncate"
Tb4b4b4:Te6edf3titleTff7b72=Ta5d6ff"Te6edf3contactTb4b4b4.Te6edf3remote_identity_hashTa5d6ff"
Tb4b4b4>
Tff7b72{{ Te6edf3formatDestinationHashTb4b4b4(Te6edf3contactTb4b4b4.Te6edf3remote_identity_hashTb4b4b4) Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72button
Te6edf3typeTff7b72=Ta5d6ff"button"
Te6edf3classTff7b72=Ta5d6ff"text-[10px] bg-blue-100 text-blue-600 dark:bg-blue-900/30 dark:text-blue-400 px-3 py-1 rounded-full font-bold uppercase tracking-wider hover:bg-blue-200 dark:hover:bg-blue-900/50 transition-colors"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"
Te6edf3destinationHash Tff7b72= Te6edf3contactTb4b4b4.Te6edf3remote_identity_hashTb4b4b4;
Te6edf3activeTab Tff7b72= Ta5d6ff'phone'Tb4b4b4;
Te6edf3callTb4b4b4(Te6edf3destinationHashTb4b4b4)Tb4b4b4;
Ta5d6ff"
Tb4b4b4>
Call
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72ulTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>

T8b949e<!-- Ringtone Tab -->
Tb4b4b4<Tff7b72div Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3activeTab Tff7b72=== Ta5d6ff'ringtone' Tff7b72&& Te6edf3configTa5d6ff" Te6edf3classTff7b72=Ta5d6ff"flex-1 space-y-6"Tb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3classTff7b72=Ta5d6ff"bg-white dark:bg-zinc-900 rounded-xl p-6 shadow-sm border border-gray-200 dark:border-zinc-800"
Tb4b4b4>
Tb4b4b4<Tff7b72h3
Te6edf3classTff7b72=Ta5d6ff"text-sm font-bold text-gray-900 dark:text-white uppercase tracking-wider mb-6 flex items-center gap-2"
Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon Te6edf3icon-nameTff7b72=Ta5d6ff"music" Te6edf3classTff7b72=Ta5d6ff"size-5 text-blue-500" Tb4b4b4/Tb4b4b4>
Tff7b72{{ Te6edf3$tTb4b4b4(Ta5d6ff"call.ringtone_settings"Tb4b4b4) Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72h3Tb4b4b4>

Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"space-y-6"Tb4b4b4>
T8b949e<!-- Enabled Toggle -->
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex items-center justify-between"Tb4b4b4>
Tb4b4b4<Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"text-sm font-semibold text-gray-900 dark:text-white"Tb4b4b4>
Tff7b72{{ Te6edf3$tTb4b4b4(Ta5d6ff"call.enable_custom_ringtone"Tb4b4b4) Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"text-xs text-gray-500 dark:text-zinc-400"Tb4b4b4>
Tff7b72{{ Te6edf3$tTb4b4b4(Ta5d6ff"call.enable_custom_ringtone_description"Tb4b4b4) Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72button
Te6edf3classTff7b72=Ta5d6ff"relative inline-flex h-6 w-11 shrink-0 cursor-pointer rounded-full border-2 border-transparent transition-colors duration-200 ease-in-out focus:outline-none"
Tb4b4b4:Te6edf3classTff7b72=Ta5d6ff"
Te6edf3configTb4b4b4.Te6edf3custom_ringtone_enabled Tff7b72? Ta5d6ff'bg-blue-600' Tff7b72: Ta5d6ff'bg-gray-200 dark:bg-zinc-700'
Ta5d6ff"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"
Te6edf3configTb4b4b4.Te6edf3custom_ringtone_enabled Tff7b72= Tff7b72!Te6edf3configTb4b4b4.Te6edf3custom_ringtone_enabledTb4b4b4;
Te6edf3updateConfigTb4b4b4(Tb4b4b4{ Te6edf3custom_ringtone_enabledTff7b72: Te6edf3configTb4b4b4.Te6edf3custom_ringtone_enabled Tb4b4b4}Tb4b4b4)Tb4b4b4;
Ta5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72span
Te6edf3classTff7b72=Ta5d6ff"pointer-events-none inline-block h-5 w-5 transform rounded-full bg-white shadow ring-0 transition duration-200 ease-in-out"
Tb4b4b4:Te6edf3classTff7b72=Ta5d6ff"Te6edf3configTb4b4b4.Te6edf3custom_ringtone_enabled Tff7b72? Ta5d6ff'translate-x-5' Tff7b72: Ta5d6ff'translate-x-0'Ta5d6ff"
Tb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>

T8b949e<!-- Ringtone List -->
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"space-y-4"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex items-center justify-between"Tb4b4b4>
Tb4b4b4<Tff7b72label Te6edf3classTff7b72=Ta5d6ff"text-sm font-semibold text-gray-700 dark:text-zinc-300"Tb4b4b4>
My Ringtones
Tb4b4b4<Tb4b4b4/Tff7b72labelTb4b4b4>
Tb4b4b4<Tff7b72button
Te6edf3typeTff7b72=Ta5d6ff"button"
Te6edf3classTff7b72=Ta5d6ff"text-xs font-bold text-blue-600 dark:text-blue-400 hover:underline flex items-center gap-1"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3$refsTb4b4b4.Te6edf3ringtoneUploadTb4b4b4.Te6edf3clickTb4b4b4(Tb4b4b4)Ta5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon Te6edf3icon-nameTff7b72=Ta5d6ff"plus" Te6edf3classTff7b72=Ta5d6ff"size-4" Tb4b4b4/Tb4b4b4>
Upload New
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tff7b72input
Te6edf3refTff7b72=Ta5d6ff"ringtoneUpload"
Te6edf3typeTff7b72=Ta5d6ff"file"
Te6edf3classTff7b72=Ta5d6ff"hidden"
Te6edf3acceptTff7b72=Ta5d6ff"audio/*"
Tb4b4b4@Te6edf3changeTff7b72=Ta5d6ff"Te6edf3uploadRingtoneTa5d6ff"
Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>

Tb4b4b4<Tff7b72div Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3ringtonesTb4b4b4.Te6edf3length Tff7b72> T79c0ff0Ta5d6ff" Te6edf3classTff7b72=Ta5d6ff"grid gap-3"Tb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3v-forTff7b72=Ta5d6ff"Te6edf3ringtone Tff7b72in Te6edf3ringtonesTa5d6ff"
Tb4b4b4:Te6edf3keyTff7b72=Ta5d6ff"Te6edf3ringtoneTb4b4b4.Te6edf3idTa5d6ff"
Te6edf3classTff7b72=Ta5d6ff"group p-4 rounded-xl border border-gray-100 dark:border-zinc-800 bg-gray-50/50 dark:bg-zinc-800/30 flex items-center gap-4 transition-all hover:shadow-md overflow-hidden"
Tb4b4b4:Te6edf3classTff7b72=Ta5d6ff"Tb4b4b4{
Ta5d6ff'ring-2 ring-blue-500/20 bg-blue-50/20 dark:bg-blue-900/10'Tff7b72:
Te6edf3ringtoneTb4b4b4.Te6edf3is_primaryTb4b4b4,
Tb4b4b4}Ta5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex-1 min-w-0 overflow-hidden"Tb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3editingRingtoneId Tff7b72=== Te6edf3ringtoneTb4b4b4.Te6edf3idTa5d6ff"
Te6edf3classTff7b72=Ta5d6ff"flex items-center gap-2"
Tb4b4b4>
Tb4b4b4<Tff7b72input
Te6edf3v-modelTff7b72=Ta5d6ff"Te6edf3editingRingtoneNameTa5d6ff"
Te6edf3classTff7b72=Ta5d6ff"text-sm bg-white dark:bg-zinc-900 border border-gray-200 dark:border-zinc-700 rounded px-2 py-1 flex-1 min-w-0"
Tb4b4b4@Te6edf3keyupTb4b4b4.Te6edf3enterTff7b72=Ta5d6ff"Te6edf3saveRingtoneNameTa5d6ff"
Tb4b4b4@Te6edf3blurTff7b72=Ta5d6ff"Te6edf3saveRingtoneNameTa5d6ff"
Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3v-else Te6edf3classTff7b72=Ta5d6ff"flex items-center gap-2 min-w-0"Tb4b4b4>
Tb4b4b4<Tff7b72span
Te6edf3classTff7b72=Ta5d6ff"text-sm font-medium text-gray-900 dark:text-white truncate"
Tb4b4b4:Te6edf3titleTff7b72=Ta5d6ff"Te6edf3ringtoneTb4b4b4.Te6edf3display_nameTa5d6ff"
Tb4b4b4>
Tff7b72{{ Te6edf3ringtoneTb4b4b4.Te6edf3display_name Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span
Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3ringtoneTb4b4b4.Te6edf3is_primaryTa5d6ff"
Te6edf3classTff7b72=Ta5d6ff"shrink-0 text-[10px] uppercase font-bold text-blue-600 dark:text-blue-400 bg-blue-100 dark:bg-blue-900/40 px-1.5 py-0.5 rounded"
Tb4b4b4>
Primary
Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72button
Te6edf3classTff7b72=Ta5d6ff"shrink-0 opacity-0 group-hover:opacity-100 p-1 text-gray-400 hover:text-blue-500 transition-opacity"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3startEditingRingtoneTb4b4b4(Te6edf3ringtoneTb4b4b4)Ta5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon Te6edf3icon-nameTff7b72=Ta5d6ff"pencil" Te6edf3classTff7b72=Ta5d6ff"size-3" Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3classTff7b72=Ta5d6ff"text-[10px] text-gray-500 dark:text-zinc-500 truncate"
Tb4b4b4:Te6edf3titleTff7b72=Ta5d6ff"Te6edf3ringtoneTb4b4b4.Te6edf3filenameTa5d6ff"
Tb4b4b4>
Tff7b72{{ Te6edf3ringtoneTb4b4b4.Te6edf3filename Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>

Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex items-center gap-1"Tb4b4b4>
Tb4b4b4<Tff7b72button
Te6edf3classTff7b72=Ta5d6ff"p-2 rounded-lg hover:bg-white dark:hover:bg-zinc-800 text-gray-500 dark:text-gray-400 transition-colors"
Tb4b4b4:Te6edf3titleTff7b72=Ta5d6ff"
Te6edf3isPlayingRingtone Tff7b72&& Te6edf3playingRingtoneId Tff7b72=== Te6edf3ringtoneTb4b4b4.Te6edf3id
Tff7b72? Ta5d6ff'Stop'
Tff7b72: Ta5d6ff'Preview'
Ta5d6ff"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3playRingtonePreviewTb4b4b4(Te6edf3ringtoneTb4b4b4)Ta5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon
Tb4b4b4:Te6edf3icon-nameTff7b72=Ta5d6ff"
Te6edf3isPlayingRingtone Tff7b72&& Te6edf3playingRingtoneId Tff7b72=== Te6edf3ringtoneTb4b4b4.Te6edf3id
Tff7b72? Ta5d6ff'stop'
Tff7b72: Ta5d6ff'play'
Ta5d6ff"
Te6edf3classTff7b72=Ta5d6ff"size-5"
Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tff7b72button
Te6edf3v-ifTff7b72=Ta5d6ff"Tff7b72!Te6edf3ringtoneTb4b4b4.Te6edf3is_primaryTa5d6ff"
Te6edf3classTff7b72=Ta5d6ff"p-2 rounded-lg hover:bg-white dark:hover:bg-zinc-800 text-gray-500 dark:text-gray-400 hover:text-blue-500 transition-colors"
Te6edf3titleTff7b72=Ta5d6ff"Set as Primary"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3setPrimaryRingtoneTb4b4b4(Te6edf3ringtoneTb4b4b4)Ta5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon Te6edf3icon-nameTff7b72=Ta5d6ff"star-outline" Te6edf3classTff7b72=Ta5d6ff"size-5" Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tff7b72button
Te6edf3classTff7b72=Ta5d6ff"p-2 rounded-lg hover:bg-white dark:hover:bg-zinc-800 text-gray-500 dark:text-gray-400 hover:text-red-500 transition-colors"
Te6edf3titleTff7b72=Ta5d6ff"Delete"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3deleteRingtoneTb4b4b4(Te6edf3ringtoneTb4b4b4)Ta5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon Te6edf3icon-nameTff7b72=Ta5d6ff"delete-outline" Te6edf3classTff7b72=Ta5d6ff"size-5" Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3v-else
Te6edf3classTff7b72=Ta5d6ff"flex flex-col items-center justify-center p-8 border-2 border-dashed border-gray-100 dark:border-zinc-800 rounded-2xl bg-gray-50/30 dark:bg-zinc-900/20"
Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon
Te6edf3icon-nameTff7b72=Ta5d6ff"music-off"
Te6edf3classTff7b72=Ta5d6ff"size-8 text-gray-300 dark:text-zinc-700 mb-2"
Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"text-xs text-gray-500 dark:text-zinc-500"Tb4b4b4>
Tff7b72{{ Te6edf3$tTb4b4b4(Ta5d6ff"call.no_custom_ringtone_uploaded"Tb4b4b4) Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72templateTb4b4b4>

Tb4b4b4<Tff7b72scriptTb4b4b4>
Tff7b72import Te6edf3Utils Tff7b72from Ta5d6ff"../../js/Utils"Tb4b4b4;
Tff7b72import Te6edf3MaterialDesignIcon Tff7b72from Ta5d6ff"../MaterialDesignIcon.vue"Tb4b4b4;
Tff7b72import Te6edf3LxmfUserIcon Tff7b72from Ta5d6ff"../LxmfUserIcon.vue"Tb4b4b4;
Tff7b72import Te6edf3Toggle Tff7b72from Ta5d6ff"../forms/Toggle.vue"Tb4b4b4;
Tff7b72import Te6edf3ToastUtils Tff7b72from Ta5d6ff"../../js/ToastUtils"Tb4b4b4;

Tff7b72export Tff7b72default Tb4b4b4{
Te6edf3nameTff7b72: Ta5d6ff"CallPage"Tb4b4b4,
Te6edf3componentsTff7b72: Tb4b4b4{ Te6edf3MaterialDesignIconTb4b4b4, Te6edf3LxmfUserIconTb4b4b4, Te6edf3Toggle Tb4b4b4}Tb4b4b4,
Te6edf3dataTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72return Tb4b4b4{
Te6edf3configTff7b72: Tff7b72nullTb4b4b4,
Te6edf3activeCallTff7b72: Tff7b72nullTb4b4b4,
Te6edf3audioProfilesTff7b72: Tb4b4b4[Tb4b4b4]Tb4b4b4,
Te6edf3selectedAudioProfileIdTff7b72: Tff7b72nullTb4b4b4,
Te6edf3destinationHashTff7b72: Ta5d6ff""Tb4b4b4,
Te6edf3isShowingStatsTff7b72: Tff7b72falseTb4b4b4,
Te6edf3callHistoryTff7b72: Tb4b4b4[Tb4b4b4]Tb4b4b4,
Te6edf3callHistorySearchTff7b72: Ta5d6ff""Tb4b4b4,
Te6edf3callHistoryLimitTff7b72: T79c0ff10Tb4b4b4,
Te6edf3callHistoryOffsetTff7b72: T79c0ff0Tb4b4b4,
Te6edf3hasMoreCallHistoryTff7b72: Tff7b72trueTb4b4b4,
Te6edf3isCallEndedTff7b72: Tff7b72falseTb4b4b4,
Te6edf3wasDeclinedTff7b72: Tff7b72falseTb4b4b4,
Te6edf3lastCallTff7b72: Tff7b72nullTb4b4b4,
Te6edf3endedTimeoutTff7b72: Tff7b72nullTb4b4b4,
Te6edf3activeTabTff7b72: Ta5d6ff"phone"Tb4b4b4,
Te6edf3voicemailsTff7b72: Tb4b4b4[Tb4b4b4]Tb4b4b4,
Te6edf3unreadVoicemailsCountTff7b72: T79c0ff0Tb4b4b4,
Te6edf3voicemailStatusTff7b72: Tb4b4b4{
Te6edf3has_espeakTff7b72: Tff7b72falseTb4b4b4,
Te6edf3has_ffmpegTff7b72: Tff7b72falseTb4b4b4,
Te6edf3is_recordingTff7b72: Tff7b72falseTb4b4b4,
Te6edf3has_greetingTff7b72: Tff7b72falseTb4b4b4,
Tb4b4b4}Tb4b4b4,
Te6edf3isGeneratingGreetingTff7b72: Tff7b72falseTb4b4b4,
Te6edf3isUploadingGreetingTff7b72: Tff7b72falseTb4b4b4,
Te6edf3isUploadingRingtoneTff7b72: Tff7b72falseTb4b4b4,
Te6edf3playingVoicemailIdTff7b72: Tff7b72nullTb4b4b4,
Te6edf3audioPlayerTff7b72: Tff7b72nullTb4b4b4,
Te6edf3isPlayingGreetingTff7b72: Tff7b72falseTb4b4b4,
Te6edf3isPlayingRingtoneTff7b72: Tff7b72falseTb4b4b4,
Te6edf3ringtoneStatusTff7b72: Tb4b4b4{
Te6edf3has_custom_ringtoneTff7b72: Tff7b72falseTb4b4b4,
Te6edf3enabledTff7b72: Tff7b72falseTb4b4b4,
Tb4b4b4}Tb4b4b4,
Te6edf3ringtonesTff7b72: Tb4b4b4[Tb4b4b4]Tb4b4b4,
Te6edf3editingRingtoneIdTff7b72: Tff7b72nullTb4b4b4,
Te6edf3editingRingtoneNameTff7b72: Ta5d6ff""Tb4b4b4,
Te6edf3elapsedTimeIntervalTff7b72: Tff7b72nullTb4b4b4,
Te6edf3voicemailSearchTff7b72: Ta5d6ff""Tb4b4b4,
Te6edf3contactsSearchTff7b72: Ta5d6ff""Tb4b4b4,
Te6edf3contactsTff7b72: Tb4b4b4[Tb4b4b4]Tb4b4b4,
Te6edf3isContactModalOpenTff7b72: Tff7b72falseTb4b4b4,
Te6edf3editingContactTff7b72: Tff7b72nullTb4b4b4,
Te6edf3contactFormTff7b72: Tb4b4b4{
Te6edf3nameTff7b72: Ta5d6ff""Tb4b4b4,
Te6edf3remote_identity_hashTff7b72: Ta5d6ff""Tb4b4b4,
Tb4b4b4}Tb4b4b4,
Te6edf3searchDebounceTimeoutTff7b72: Tff7b72nullTb4b4b4,
Te6edf3isVoicemailSettingsExpandedTff7b72: Tff7b72falseTb4b4b4,
Tb4b4b4}Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Te6edf3computedTff7b72: Tb4b4b4{
Te6edf3isMicMutedTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72return Tff7b72thisTb4b4b4.Te6edf3activeCallTff7b72?Tb4b4b4.Te6edf3is_mic_muted Tff7b72?? Tff7b72falseTb4b4b4;
Tb4b4b4}Tb4b4b4,
Te6edf3isSpeakerMutedTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72return Tff7b72thisTb4b4b4.Te6edf3activeCallTff7b72?Tb4b4b4.Te6edf3is_speaker_muted Tff7b72?? Tff7b72falseTb4b4b4;
Tb4b4b4}Tb4b4b4,
Te6edf3elapsedTimeTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Tff7b72thisTb4b4b4.Te6edf3activeCallTff7b72?Tb4b4b4.Te6edf3call_start_timeTb4b4b4) Tb4b4b4{
Tff7b72return Tff7b72nullTb4b4b4;
Tb4b4b4}
Tff7b72const Te6edf3elapsed Tff7b72= Tffa657MathTb4b4b4.Te6edf3floorTb4b4b4(Tffa657DateTb4b4b4.Te6edf3nowTb4b4b4(Tb4b4b4) Tff7b72/ T79c0ff1000 Tff7b72- Tff7b72thisTb4b4b4.Te6edf3activeCallTb4b4b4.Te6edf3call_start_timeTb4b4b4)Tb4b4b4;
Tff7b72return Te6edf3UtilsTb4b4b4.Te6edf3formatMinutesSecondsTb4b4b4(Te6edf3elapsedTb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Te6edf3callDurationTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Tff7b72thisTb4b4b4.Te6edf3isCallEnded Tff7b72|| Tff7b72!Tff7b72thisTb4b4b4.Te6edf3lastCallTff7b72?Tb4b4b4.Te6edf3call_start_timeTb4b4b4) Tb4b4b4{
Tff7b72return Tff7b72nullTb4b4b4;
Tb4b4b4}
Tff7b72const Te6edf3duration Tff7b72= Tffa657MathTb4b4b4.Te6edf3floorTb4b4b4(Tffa657DateTb4b4b4.Te6edf3nowTb4b4b4(Tb4b4b4) Tff7b72/ T79c0ff1000 Tff7b72- Tff7b72thisTb4b4b4.Te6edf3lastCallTb4b4b4.Te6edf3call_start_timeTb4b4b4)Tb4b4b4;
Tff7b72return Te6edf3UtilsTb4b4b4.Te6edf3formatMinutesSecondsTb4b4b4(Te6edf3durationTb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4,
Te6edf3mountedTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3getConfigTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3getAudioProfilesTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3getStatusTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3getHistoryTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3getVoicemailsTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3getContactsTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3getVoicemailStatusTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3getRingtonesTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3getRingtoneStatusTb4b4b4(Tb4b4b4)Tb4b4b4;

T8b949e// poll for status
Tff7b72thisTb4b4b4.Te6edf3statusInterval Tff7b72= Te6edf3setIntervalTb4b4b4(Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3getStatusTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3getVoicemailStatusTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3getRingtoneStatusTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4, T79c0ff1000Tb4b4b4)Tb4b4b4;

T8b949e// poll for history/voicemails less frequently
Tff7b72thisTb4b4b4.Te6edf3historyInterval Tff7b72= Te6edf3setIntervalTb4b4b4(Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3getHistoryTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3getVoicemailsTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3getContactsTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4, T79c0ff10000Tb4b4b4)Tb4b4b4;

T8b949e// update elapsed time every second
Tff7b72thisTb4b4b4.Te6edf3elapsedTimeInterval Tff7b72= Te6edf3setIntervalTb4b4b4(Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3$forceUpdateTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4, T79c0ff1000Tb4b4b4)Tb4b4b4;

T8b949e// autofill destination hash from query string
Tff7b72const Te6edf3urlParams Tff7b72= Tff7b72new Te6edf3URLSearchParamsTb4b4b4(Tffa657windowTb4b4b4.Te6edf3locationTb4b4b4.Te6edf3searchTb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3destinationHash Tff7b72= Te6edf3urlParamsTb4b4b4.Te6edf3getTb4b4b4(Ta5d6ff"destination_hash"Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3destinationHashTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3destinationHash Tff7b72= Te6edf3destinationHashTb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Te6edf3beforeUnmountTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3statusIntervalTb4b4b4) Te6edf3clearIntervalTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3statusIntervalTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3historyIntervalTb4b4b4) Te6edf3clearIntervalTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3historyIntervalTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3elapsedTimeIntervalTb4b4b4) Te6edf3clearIntervalTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3elapsedTimeIntervalTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3endedTimeoutTb4b4b4) Te6edf3clearTimeoutTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3endedTimeoutTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3audioPlayerTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3audioPlayerTb4b4b4.Te6edf3pauseTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3audioPlayer Tff7b72= Tff7b72nullTb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Te6edf3methodsTff7b72: Tb4b4b4{
Te6edf3formatDestinationHashTb4b4b4(Te6edf3hashTb4b4b4) Tb4b4b4{
Tff7b72return Te6edf3UtilsTb4b4b4.Te6edf3formatDestinationHashTb4b4b4(Te6edf3hashTb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Te6edf3formatBytesTb4b4b4(Te6edf3bytesTb4b4b4) Tb4b4b4{
Tff7b72return Te6edf3UtilsTb4b4b4.Te6edf3formatBytesTb4b4b4(Te6edf3bytes Tff7b72|| T79c0ff0Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Te6edf3formatDateTimeTb4b4b4(Te6edf3timestampTb4b4b4) Tb4b4b4{
Tff7b72return Te6edf3UtilsTb4b4b4.Te6edf3convertUnixMillisToLocalDateTimeStringTb4b4b4(Te6edf3timestampTb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Te6edf3formatDurationTb4b4b4(Te6edf3secondsTb4b4b4) Tb4b4b4{
Tff7b72return Te6edf3UtilsTb4b4b4.Te6edf3formatMinutesSecondsTb4b4b4(Te6edf3secondsTb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3getConfigTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Tff7b72const Te6edf3response Tff7b72= Tff7b72await Tffa657windowTb4b4b4.Te6edf3axiosTb4b4b4.Te6edf3getTb4b4b4(Ta5d6ff"/api/v1/config"Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3config Tff7b72= Te6edf3responseTb4b4b4.Te6edf3dataTb4b4b4.Te6edf3configTb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{
Te6edf3consoleTb4b4b4.Te6edf3logTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3updateConfigTb4b4b4(Te6edf3configTb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Tff7b72await Tffa657windowTb4b4b4.Te6edf3axiosTb4b4b4.Te6edf3patchTb4b4b4(Ta5d6ff"/api/v1/config"Tb4b4b4, Te6edf3configTb4b4b4)Tb4b4b4;
Tff7b72await Tff7b72thisTb4b4b4.Te6edf3getConfigTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3ToastUtilsTb4b4b4.Te6edf3successTb4b4b4(Ta5d6ff"Settings saved"Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4{
Te6edf3ToastUtilsTb4b4b4.Te6edf3errorTb4b4b4(Ta5d6ff"Failed to save settings"Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3getAudioProfilesTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Tff7b72const Te6edf3response Tff7b72= Tff7b72await Tffa657windowTb4b4b4.Te6edf3axiosTb4b4b4.Te6edf3getTb4b4b4(Ta5d6ff"/api/v1/telephone/audio-profiles"Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3audioProfiles Tff7b72= Te6edf3responseTb4b4b4.Te6edf3dataTb4b4b4.Te6edf3audio_profilesTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3selectedAudioProfileId Tff7b72= Te6edf3responseTb4b4b4.Te6edf3dataTb4b4b4.Te6edf3default_audio_profile_idTb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{
Te6edf3consoleTb4b4b4.Te6edf3logTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3getStatusTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Tff7b72const Te6edf3response Tff7b72= Tff7b72await Tffa657windowTb4b4b4.Te6edf3axiosTb4b4b4.Te6edf3getTb4b4b4(Ta5d6ff"/api/v1/telephone/status"Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3oldCall Tff7b72= Tff7b72thisTb4b4b4.Te6edf3activeCallTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3activeCall Tff7b72= Te6edf3responseTb4b4b4.Te6edf3dataTb4b4b4.Te6edf3active_callTb4b4b4;

Tff7b72if Tb4b4b4(Te6edf3responseTb4b4b4.Te6edf3dataTb4b4b4.Te6edf3voicemailTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3unreadVoicemailsCount Tff7b72= Te6edf3responseTb4b4b4.Te6edf3dataTb4b4b4.Te6edf3voicemailTb4b4b4.Te6edf3unread_countTb4b4b4;
Tb4b4b4}

T8b949e// If call just ended, refresh history and show ended state
Tff7b72if Tb4b4b4(Te6edf3oldCall Tff7b72!= Tff7b72null Tff7b72&& Tff7b72thisTb4b4b4.Te6edf3activeCall Tff7b72== Tff7b72nullTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3getHistoryTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3getVoicemailsTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3lastCall Tff7b72= Te6edf3oldCallTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3isCallEnded Tff7b72= Tff7b72trueTb4b4b4;

Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3endedTimeoutTb4b4b4) Te6edf3clearTimeoutTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3endedTimeoutTb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3endedTimeout Tff7b72= Te6edf3setTimeoutTb4b4b4(Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3isCallEnded Tff7b72= Tff7b72falseTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3lastCall Tff7b72= Tff7b72nullTb4b4b4;
Tb4b4b4}Tb4b4b4, T79c0ff5000Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72else Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3activeCall Tff7b72!= Tff7b72nullTb4b4b4) Tb4b4b4{
T8b949e// if a new call starts, clear ended state
Tff7b72thisTb4b4b4.Te6edf3isCallEnded Tff7b72= Tff7b72falseTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3lastCall Tff7b72= Tff7b72nullTb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3endedTimeoutTb4b4b4) Te6edf3clearTimeoutTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3endedTimeoutTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{
Te6edf3consoleTb4b4b4.Te6edf3logTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3addContactFromHistoryTb4b4b4(Te6edf3entryTb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3name Tff7b72= Te6edf3promptTb4b4b4(Ta5d6ff"Enter contact name:"Tb4b4b4, Te6edf3entryTb4b4b4.Te6edf3remote_identity_name Tff7b72|| Ta5d6ff""Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3nameTb4b4b4) Tff7b72returnTb4b4b4;
Tff7b72try Tb4b4b4{
Tff7b72await Tffa657windowTb4b4b4.Te6edf3axiosTb4b4b4.Te6edf3postTb4b4b4(Ta5d6ff"/api/v1/telephone/contacts"Tb4b4b4, Tb4b4b4{
Te6edf3nameTff7b72: Te6edf3nameTb4b4b4,
Te6edf3remote_identity_hashTff7b72: Te6edf3entryTb4b4b4.Te6edf3remote_identity_hashTb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3ToastUtilsTb4b4b4.Te6edf3successTb4b4b4(Ta5d6ff"Contact added"Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3getHistoryTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3getContactsTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{
Te6edf3ToastUtilsTb4b4b4.Te6edf3errorTb4b4b4(Te6edf3eTb4b4b4.Te6edf3responseTff7b72?Tb4b4b4.Te6edf3dataTff7b72?Tb4b4b4.Te6edf3message Tff7b72|| Ta5d6ff"Failed to add contact"Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3getHistoryTb4b4b4(Te6edf3loadMore Tff7b72= Tff7b72falseTb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3loadMoreTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3callHistoryOffset Tff7b72= T79c0ff0Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3hasMoreCallHistory Tff7b72= Tff7b72trueTb4b4b4;
Tb4b4b4}

Tff7b72const Te6edf3response Tff7b72= Tff7b72await Tffa657windowTb4b4b4.Te6edf3axiosTb4b4b4.Te6edf3getTb4b4b4(
Ta5d6ff`Ta5d6ff/api/v1/telephone/history?limit=Tffd700${Tff7b72thisTb4b4b4.Te6edf3callHistoryLimitTffd700}Ta5d6ff&offset=Tffd700${Tff7b72thisTb4b4b4.Te6edf3callHistoryOffsetTffd700}Tffd700${
Tff7b72thisTb4b4b4.Te6edf3callHistorySearch Tff7b72? Ta5d6ff`Ta5d6ff&search=Tffd700${Tffa657encodeURIComponentTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3callHistorySearchTb4b4b4)Tffd700}Ta5d6ff` Tff7b72: Ta5d6ff""
Tffd700}Ta5d6ff`
Tb4b4b4)Tb4b4b4;

Tff7b72const Te6edf3newItems Tff7b72= Te6edf3responseTb4b4b4.Te6edf3dataTb4b4b4.Te6edf3call_historyTb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3loadMoreTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3callHistory Tff7b72= Tb4b4b4[Tb4b4b4...Tff7b72thisTb4b4b4.Te6edf3callHistoryTb4b4b4, Tb4b4b4...Te6edf3newItemsTb4b4b4]Tb4b4b4;
Tb4b4b4} Tff7b72else Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3callHistory Tff7b72= Te6edf3newItemsTb4b4b4;
Tb4b4b4}

Tff7b72thisTb4b4b4.Te6edf3hasMoreCallHistory Tff7b72= Te6edf3newItemsTb4b4b4.Te6edf3length Tff7b72=== Tff7b72thisTb4b4b4.Te6edf3callHistoryLimitTb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{
Te6edf3consoleTb4b4b4.Te6edf3logTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3loadMoreCallHistoryTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3callHistoryOffset Tff7b72+= Tff7b72thisTb4b4b4.Te6edf3callHistoryLimitTb4b4b4;
Tff7b72await Tff7b72thisTb4b4b4.Te6edf3getHistoryTb4b4b4(Tff7b72trueTb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Te6edf3onCallHistorySearchInputTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3searchDebounceTimeoutTb4b4b4) Te6edf3clearTimeoutTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3searchDebounceTimeoutTb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3searchDebounceTimeout Tff7b72= Te6edf3setTimeoutTb4b4b4(Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3getHistoryTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4, T79c0ff500Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3toggleDoNotDisturbTb4b4b4(Te6edf3valueTb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Tff7b72await Tffa657windowTb4b4b4.Te6edf3axiosTb4b4b4.Te6edf3postTb4b4b4(Ta5d6ff"/api/v1/config"Tb4b4b4, Tb4b4b4{
Te6edf3keyTff7b72: Ta5d6ff"do_not_disturb_enabled"Tb4b4b4,
Te6edf3valueTff7b72: Te6edf3value Tff7b72? Ta5d6ff"true" Tff7b72: Ta5d6ff"false"Tb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3configTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3configTb4b4b4.Te6edf3do_not_disturb_enabled Tff7b72= Te6edf3valueTb4b4b4;
Tb4b4b4}
Te6edf3ToastUtilsTb4b4b4.Te6edf3successTb4b4b4(Te6edf3value Tff7b72? Ta5d6ff"Do Not Disturb enabled" Tff7b72: Ta5d6ff"Do Not Disturb disabled"Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4{
Te6edf3ToastUtilsTb4b4b4.Te6edf3errorTb4b4b4(Ta5d6ff"Failed to update Do Not Disturb status"Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3clearHistoryTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3confirmTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"common.delete_confirm"Tb4b4b4)Tb4b4b4)Tb4b4b4) Tff7b72returnTb4b4b4;
Tff7b72try Tb4b4b4{
Tff7b72await Tffa657windowTb4b4b4.Te6edf3axiosTb4b4b4.Tff7b72deleteTb4b4b4(Ta5d6ff"/api/v1/telephone/history"Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3callHistory Tff7b72= Tb4b4b4[Tb4b4b4]Tb4b4b4;
Te6edf3ToastUtilsTb4b4b4.Te6edf3successTb4b4b4(Ta5d6ff"Call history cleared"Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{
Te6edf3consoleTb4b4b4.Te6edf3errorTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4;
Te6edf3ToastUtilsTb4b4b4.Te6edf3errorTb4b4b4(Ta5d6ff"Failed to clear call history"Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3blockIdentityTb4b4b4(Te6edf3hashTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3confirmTb4b4b4(Ta5d6ff`Ta5d6ffAre you sure you want to block this identity?Ta5d6ff`Tb4b4b4)Tb4b4b4) Tff7b72returnTb4b4b4;
Tff7b72try Tb4b4b4{
Tff7b72await Tffa657windowTb4b4b4.Te6edf3axiosTb4b4b4.Te6edf3postTb4b4b4(Ta5d6ff"/api/v1/blocked-destinations"Tb4b4b4, Tb4b4b4{
Te6edf3destination_hashTff7b72: Te6edf3hashTb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3ToastUtilsTb4b4b4.Te6edf3successTb4b4b4(Ta5d6ff"Identity blocked"Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3getHistoryTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4{
Te6edf3ToastUtilsTb4b4b4.Te6edf3errorTb4b4b4(Ta5d6ff"Failed to block identity"Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3getVoicemailStatusTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Tff7b72const Te6edf3response Tff7b72= Tff7b72await Tffa657windowTb4b4b4.Te6edf3axiosTb4b4b4.Te6edf3getTb4b4b4(Ta5d6ff"/api/v1/telephone/voicemail/status"Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3voicemailStatus Tff7b72= Te6edf3responseTb4b4b4.Te6edf3dataTb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{
Te6edf3consoleTb4b4b4.Te6edf3logTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3getRingtoneStatusTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Tff7b72const Te6edf3response Tff7b72= Tff7b72await Tffa657windowTb4b4b4.Te6edf3axiosTb4b4b4.Te6edf3getTb4b4b4(Ta5d6ff"/api/v1/telephone/ringtones/status"Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3ringtoneStatus Tff7b72= Te6edf3responseTb4b4b4.Te6edf3dataTb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{
Te6edf3consoleTb4b4b4.Te6edf3logTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3getRingtonesTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Tff7b72const Te6edf3response Tff7b72= Tff7b72await Tffa657windowTb4b4b4.Te6edf3axiosTb4b4b4.Te6edf3getTb4b4b4(Ta5d6ff"/api/v1/telephone/ringtones"Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3ringtones Tff7b72= Te6edf3responseTb4b4b4.Te6edf3dataTb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{
Te6edf3consoleTb4b4b4.Te6edf3errorTb4b4b4(Ta5d6ff"Failed to get ringtones:"Tb4b4b4, Te6edf3eTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3deleteRingtoneTb4b4b4(Te6edf3ringtoneTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3confirmTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"common.delete_confirm"Tb4b4b4)Tb4b4b4)Tb4b4b4) Tff7b72returnTb4b4b4;
Tff7b72try Tb4b4b4{
Tff7b72await Tffa657windowTb4b4b4.Te6edf3axiosTb4b4b4.Tff7b72deleteTb4b4b4(Ta5d6ff`Ta5d6ff/api/v1/telephone/ringtones/Tffd700${Te6edf3ringtoneTb4b4b4.Te6edf3idTffd700}Ta5d6ff`Tb4b4b4)Tb4b4b4;
Te6edf3ToastUtilsTb4b4b4.Te6edf3successTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"call.ringtone_deleted"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tff7b72await Tff7b72thisTb4b4b4.Te6edf3getRingtonesTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72await Tff7b72thisTb4b4b4.Te6edf3getRingtoneStatusTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{
Te6edf3consoleTb4b4b4.Te6edf3errorTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4;
Te6edf3ToastUtilsTb4b4b4.Te6edf3errorTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"call.failed_to_delete_ringtone"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3setPrimaryRingtoneTb4b4b4(Te6edf3ringtoneTb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Tff7b72await Tffa657windowTb4b4b4.Te6edf3axiosTb4b4b4.Te6edf3patchTb4b4b4(Ta5d6ff`Ta5d6ff/api/v1/telephone/ringtones/Tffd700${Te6edf3ringtoneTb4b4b4.Te6edf3idTffd700}Ta5d6ff`Tb4b4b4, Tb4b4b4{
Te6edf3is_primaryTff7b72: Tff7b72trueTb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3ToastUtilsTb4b4b4.Te6edf3successTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"call.primary_ringtone_set"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tff7b72await Tff7b72thisTb4b4b4.Te6edf3getRingtonesTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72await Tff7b72thisTb4b4b4.Te6edf3getRingtoneStatusTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{
Te6edf3consoleTb4b4b4.Te6edf3errorTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4;
Te6edf3ToastUtilsTb4b4b4.Te6edf3errorTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"call.failed_to_set_primary_ringtone"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Te6edf3startEditingRingtoneTb4b4b4(Te6edf3ringtoneTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3editingRingtoneId Tff7b72= Te6edf3ringtoneTb4b4b4.Te6edf3idTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3editingRingtoneName Tff7b72= Te6edf3ringtoneTb4b4b4.Te6edf3display_nameTb4b4b4;
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3saveRingtoneNameTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Tff7b72await Tffa657windowTb4b4b4.Te6edf3axiosTb4b4b4.Te6edf3patchTb4b4b4(Ta5d6ff`Ta5d6ff/api/v1/telephone/ringtones/Tffd700${Tff7b72thisTb4b4b4.Te6edf3editingRingtoneIdTffd700}Ta5d6ff`Tb4b4b4, Tb4b4b4{
Te6edf3display_nameTff7b72: Tff7b72thisTb4b4b4.Te6edf3editingRingtoneNameTb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3editingRingtoneId Tff7b72= Tff7b72nullTb4b4b4;
Tff7b72await Tff7b72thisTb4b4b4.Te6edf3getRingtonesTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{
Te6edf3consoleTb4b4b4.Te6edf3errorTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4;
Te6edf3ToastUtilsTb4b4b4.Te6edf3errorTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"call.failed_to_update_ringtone_name"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3uploadRingtoneTb4b4b4(Te6edf3eventTb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3file Tff7b72= Te6edf3eventTb4b4b4.Te6edf3targetTb4b4b4.Te6edf3filesTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3fileTb4b4b4) Tff7b72returnTb4b4b4;

Tff7b72thisTb4b4b4.Te6edf3isUploadingRingtone Tff7b72= Tff7b72trueTb4b4b4;
Tff7b72const Te6edf3formData Tff7b72= Tff7b72new Te6edf3FormDataTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3formDataTb4b4b4.Te6edf3appendTb4b4b4(Ta5d6ff"file"Tb4b4b4, Te6edf3fileTb4b4b4)Tb4b4b4;

Tff7b72try Tb4b4b4{
Tff7b72await Tffa657windowTb4b4b4.Te6edf3axiosTb4b4b4.Te6edf3postTb4b4b4(Ta5d6ff"/api/v1/telephone/ringtones/upload"Tb4b4b4, Te6edf3formDataTb4b4b4, Tb4b4b4{
Te6edf3headersTff7b72: Tb4b4b4{
Ta5d6ff"Content-Type"Tff7b72: Ta5d6ff"multipart/form-data"Tb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3ToastUtilsTb4b4b4.Te6edf3successTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"call.ringtone_uploaded_successfully"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tff7b72await Tff7b72thisTb4b4b4.Te6edf3getRingtonesTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72await Tff7b72thisTb4b4b4.Te6edf3getRingtoneStatusTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{
Te6edf3consoleTb4b4b4.Te6edf3errorTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4;
Te6edf3ToastUtilsTb4b4b4.Te6edf3errorTb4b4b4(Te6edf3eTb4b4b4.Te6edf3responseTff7b72?Tb4b4b4.Te6edf3dataTff7b72?Tb4b4b4.Te6edf3message Tff7b72|| Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"call.failed_to_upload_ringtone"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72finally Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3isUploadingRingtone Tff7b72= Tff7b72falseTb4b4b4;
Te6edf3eventTb4b4b4.Te6edf3targetTb4b4b4.Te6edf3value Tff7b72= Ta5d6ff""Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3playRingtonePreviewTb4b4b4(Te6edf3ringtoneTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3isPlayingRingtone Tff7b72&& Tff7b72thisTb4b4b4.Te6edf3playingRingtoneId Tff7b72=== Te6edf3ringtoneTb4b4b4.Te6edf3idTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3audioPlayerTb4b4b4.Te6edf3pauseTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3isPlayingRingtone Tff7b72= Tff7b72falseTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3playingRingtoneId Tff7b72= Tff7b72nullTb4b4b4;
Tff7b72returnTb4b4b4;
Tb4b4b4}

Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3audioPlayerTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3audioPlayerTb4b4b4.Te6edf3pauseTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}

Tff7b72thisTb4b4b4.Te6edf3playingRingtoneId Tff7b72= Te6edf3ringtoneTb4b4b4.Te6edf3idTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3audioPlayer Tff7b72= Tff7b72new Te6edf3AudioTb4b4b4(Ta5d6ff`Ta5d6ff/api/v1/telephone/ringtones/Tffd700${Te6edf3ringtoneTb4b4b4.Te6edf3idTffd700}Ta5d6ff/audioTa5d6ff`Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3audioPlayerTb4b4b4.Te6edf3onended Tff7b72= Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3isPlayingRingtone Tff7b72= Tff7b72falseTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3playingRingtoneId Tff7b72= Tff7b72nullTb4b4b4;
Tb4b4b4}Tb4b4b4;

Tff7b72try Tb4b4b4{
Tff7b72await Tff7b72thisTb4b4b4.Te6edf3audioPlayerTb4b4b4.Te6edf3playTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3isPlayingRingtone Tff7b72= Tff7b72trueTb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{
Te6edf3consoleTb4b4b4.Te6edf3errorTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4;
Te6edf3ToastUtilsTb4b4b4.Te6edf3errorTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"call.failed_to_play_ringtone"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3getVoicemailsTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Tff7b72const Te6edf3response Tff7b72= Tff7b72await Tffa657windowTb4b4b4.Te6edf3axiosTb4b4b4.Te6edf3getTb4b4b4(Ta5d6ff"/api/v1/telephone/voicemails"Tb4b4b4, Tb4b4b4{
Te6edf3paramsTff7b72: Tb4b4b4{ Te6edf3searchTff7b72: Tff7b72thisTb4b4b4.Te6edf3voicemailSearch Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3voicemails Tff7b72= Te6edf3responseTb4b4b4.Te6edf3dataTb4b4b4.Te6edf3voicemailsTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3unreadVoicemailsCount Tff7b72= Te6edf3responseTb4b4b4.Te6edf3dataTb4b4b4.Te6edf3unread_countTb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{
Te6edf3consoleTb4b4b4.Te6edf3logTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Te6edf3onVoicemailSearchInputTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3searchDebounceTimeoutTb4b4b4) Te6edf3clearTimeoutTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3searchDebounceTimeoutTb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3searchDebounceTimeout Tff7b72= Te6edf3setTimeoutTb4b4b4(Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3getVoicemailsTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4, T79c0ff300Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3getContactsTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Tff7b72const Te6edf3response Tff7b72= Tff7b72await Tffa657windowTb4b4b4.Te6edf3axiosTb4b4b4.Te6edf3getTb4b4b4(Ta5d6ff"/api/v1/telephone/contacts"Tb4b4b4, Tb4b4b4{
Te6edf3paramsTff7b72: Tb4b4b4{ Te6edf3searchTff7b72: Tff7b72thisTb4b4b4.Te6edf3contactsSearch Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3contacts Tff7b72= Te6edf3responseTb4b4b4.Te6edf3dataTb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{
Te6edf3consoleTb4b4b4.Te6edf3logTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Te6edf3onContactsSearchInputTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3searchDebounceTimeoutTb4b4b4) Te6edf3clearTimeoutTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3searchDebounceTimeoutTb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3searchDebounceTimeout Tff7b72= Te6edf3setTimeoutTb4b4b4(Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3getContactsTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4, T79c0ff300Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Te6edf3openAddContactModalTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3editingContact Tff7b72= Tff7b72nullTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3contactForm Tff7b72= Tb4b4b4{ Te6edf3nameTff7b72: Ta5d6ff""Tb4b4b4, Te6edf3remote_identity_hashTff7b72: Ta5d6ff"" Tb4b4b4}Tb4b4b4;
Tff7b72const Te6edf3name Tff7b72= Te6edf3promptTb4b4b4(Ta5d6ff"Enter contact name:"Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3nameTb4b4b4) Tff7b72returnTb4b4b4;
Tff7b72const Te6edf3hash Tff7b72= Te6edf3promptTb4b4b4(Ta5d6ff"Enter identity hash:"Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3hashTb4b4b4) Tff7b72returnTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3saveContactTb4b4b4(Tb4b4b4{ Te6edf3nameTb4b4b4, Te6edf3remote_identity_hashTff7b72: Te6edf3hash Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Te6edf3openEditContactModalTb4b4b4(Te6edf3contactTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3editingContact Tff7b72= Te6edf3contactTb4b4b4;
Tff7b72const Te6edf3name Tff7b72= Te6edf3promptTb4b4b4(Ta5d6ff"Edit contact name:"Tb4b4b4, Te6edf3contactTb4b4b4.Te6edf3nameTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3nameTb4b4b4) Tff7b72returnTb4b4b4;
Tff7b72const Te6edf3hash Tff7b72= Te6edf3promptTb4b4b4(Ta5d6ff"Edit identity hash:"Tb4b4b4, Te6edf3contactTb4b4b4.Te6edf3remote_identity_hashTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3hashTb4b4b4) Tff7b72returnTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3saveContactTb4b4b4(Tb4b4b4{ Te6edf3idTff7b72: Te6edf3contactTb4b4b4.Te6edf3idTb4b4b4, Te6edf3nameTb4b4b4, Te6edf3remote_identity_hashTff7b72: Te6edf3hash Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3saveContactTb4b4b4(Te6edf3contactTb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3contactTb4b4b4.Te6edf3idTb4b4b4) Tb4b4b4{
Tff7b72await Tffa657windowTb4b4b4.Te6edf3axiosTb4b4b4.Te6edf3patchTb4b4b4(Ta5d6ff`Ta5d6ff/api/v1/telephone/contacts/Tffd700${Te6edf3contactTb4b4b4.Te6edf3idTffd700}Ta5d6ff`Tb4b4b4, Te6edf3contactTb4b4b4)Tb4b4b4;
Te6edf3ToastUtilsTb4b4b4.Te6edf3successTb4b4b4(Ta5d6ff"Contact updated"Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72else Tb4b4b4{
Tff7b72await Tffa657windowTb4b4b4.Te6edf3axiosTb4b4b4.Te6edf3postTb4b4b4(Ta5d6ff"/api/v1/telephone/contacts"Tb4b4b4, Te6edf3contactTb4b4b4)Tb4b4b4;
Te6edf3ToastUtilsTb4b4b4.Te6edf3successTb4b4b4(Ta5d6ff"Contact added"Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72thisTb4b4b4.Te6edf3getContactsTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{
Te6edf3ToastUtilsTb4b4b4.Te6edf3errorTb4b4b4(Te6edf3eTb4b4b4.Te6edf3responseTff7b72?Tb4b4b4.Te6edf3dataTff7b72?Tb4b4b4.Te6edf3message Tff7b72|| Ta5d6ff"Failed to save contact"Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3deleteContactTb4b4b4(Te6edf3contactIdTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3confirmTb4b4b4(Ta5d6ff"Are you sure you want to delete this contact?"Tb4b4b4)Tb4b4b4) Tff7b72returnTb4b4b4;
Tff7b72try Tb4b4b4{
Tff7b72await Tffa657windowTb4b4b4.Te6edf3axiosTb4b4b4.Tff7b72deleteTb4b4b4(Ta5d6ff`Ta5d6ff/api/v1/telephone/contacts/Tffd700${Te6edf3contactIdTffd700}Ta5d6ff`Tb4b4b4)Tb4b4b4;
Te6edf3ToastUtilsTb4b4b4.Te6edf3successTb4b4b4(Ta5d6ff"Contact deleted"Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3getContactsTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4{
Te6edf3ToastUtilsTb4b4b4.Te6edf3errorTb4b4b4(Ta5d6ff"Failed to delete contact"Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3generateGreetingTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3isGeneratingGreeting Tff7b72= Tff7b72trueTb4b4b4;
Tff7b72try Tb4b4b4{
Tff7b72await Tffa657windowTb4b4b4.Te6edf3axiosTb4b4b4.Te6edf3postTb4b4b4(Ta5d6ff"/api/v1/telephone/voicemail/generate-greeting"Tb4b4b4)Tb4b4b4;
Te6edf3ToastUtilsTb4b4b4.Te6edf3successTb4b4b4(Ta5d6ff"Greeting generated successfully"Tb4b4b4)Tb4b4b4;
Tff7b72await Tff7b72thisTb4b4b4.Te6edf3getVoicemailStatusTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{
Te6edf3ToastUtilsTb4b4b4.Te6edf3errorTb4b4b4(Te6edf3eTb4b4b4.Te6edf3responseTff7b72?Tb4b4b4.Te6edf3dataTff7b72?Tb4b4b4.Te6edf3message Tff7b72|| Ta5d6ff"Failed to generate greeting"Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72finally Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3isGeneratingGreeting Tff7b72= Tff7b72falseTb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3uploadGreetingTb4b4b4(Te6edf3eventTb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3file Tff7b72= Te6edf3eventTb4b4b4.Te6edf3targetTb4b4b4.Te6edf3filesTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3fileTb4b4b4) Tff7b72returnTb4b4b4;

Tff7b72thisTb4b4b4.Te6edf3isUploadingGreeting Tff7b72= Tff7b72trueTb4b4b4;
Tff7b72const Te6edf3formData Tff7b72= Tff7b72new Te6edf3FormDataTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3formDataTb4b4b4.Te6edf3appendTb4b4b4(Ta5d6ff"file"Tb4b4b4, Te6edf3fileTb4b4b4)Tb4b4b4;

Tff7b72try Tb4b4b4{
Tff7b72await Tffa657windowTb4b4b4.Te6edf3axiosTb4b4b4.Te6edf3postTb4b4b4(Ta5d6ff"/api/v1/telephone/voicemail/greeting/upload"Tb4b4b4, Te6edf3formDataTb4b4b4, Tb4b4b4{
Te6edf3headersTff7b72: Tb4b4b4{
Ta5d6ff"Content-Type"Tff7b72: Ta5d6ff"multipart/form-data"Tb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3ToastUtilsTb4b4b4.Te6edf3successTb4b4b4(Ta5d6ff"Greeting uploaded successfully"Tb4b4b4)Tb4b4b4;
Tff7b72await Tff7b72thisTb4b4b4.Te6edf3getVoicemailStatusTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{
Te6edf3ToastUtilsTb4b4b4.Te6edf3errorTb4b4b4(Te6edf3eTb4b4b4.Te6edf3responseTff7b72?Tb4b4b4.Te6edf3dataTff7b72?Tb4b4b4.Te6edf3message Tff7b72|| Ta5d6ff"Failed to upload greeting"Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72finally Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3isUploadingGreeting Tff7b72= Tff7b72falseTb4b4b4;
Te6edf3eventTb4b4b4.Te6edf3targetTb4b4b4.Te6edf3value Tff7b72= Ta5d6ff""Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3deleteGreetingTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3confirmTb4b4b4(Ta5d6ff"Are you sure you want to delete your custom greeting?"Tb4b4b4)Tb4b4b4) Tff7b72returnTb4b4b4;

Tff7b72try Tb4b4b4{
Tff7b72await Tffa657windowTb4b4b4.Te6edf3axiosTb4b4b4.Tff7b72deleteTb4b4b4(Ta5d6ff"/api/v1/telephone/voicemail/greeting"Tb4b4b4)Tb4b4b4;
Te6edf3ToastUtilsTb4b4b4.Te6edf3successTb4b4b4(Ta5d6ff"Greeting deleted"Tb4b4b4)Tb4b4b4;
Tff7b72await Tff7b72thisTb4b4b4.Te6edf3getVoicemailStatusTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4{
Te6edf3ToastUtilsTb4b4b4.Te6edf3errorTb4b4b4(Ta5d6ff"Failed to delete greeting"Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3playVoicemailTb4b4b4(Te6edf3voicemailTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3playingVoicemailId Tff7b72=== Te6edf3voicemailTb4b4b4.Te6edf3idTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3audioPlayerTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3audioPlayerTb4b4b4.Te6edf3pauseTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72thisTb4b4b4.Te6edf3playingVoicemailId Tff7b72= Tff7b72nullTb4b4b4;
Tff7b72returnTb4b4b4;
Tb4b4b4}

Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3audioPlayerTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3audioPlayerTb4b4b4.Te6edf3pauseTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}

Tff7b72thisTb4b4b4.Te6edf3playingVoicemailId Tff7b72= Te6edf3voicemailTb4b4b4.Te6edf3idTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3audioPlayer Tff7b72= Tff7b72new Te6edf3AudioTb4b4b4(Ta5d6ff`Ta5d6ff/api/v1/telephone/voicemails/Tffd700${Te6edf3voicemailTb4b4b4.Te6edf3idTffd700}Ta5d6ff/audioTa5d6ff`Tb4b4b4)Tb4b4b4;

Tff7b72thisTb4b4b4.Te6edf3audioPlayerTb4b4b4.Te6edf3addEventListenerTb4b4b4(Ta5d6ff"error"Tb4b4b4, Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4=> Tb4b4b4{
Te6edf3consoleTb4b4b4.Te6edf3errorTb4b4b4(Ta5d6ff"Audio player error:"Tb4b4b4, Te6edf3eTb4b4b4)Tb4b4b4;
Te6edf3ToastUtilsTb4b4b4.Te6edf3errorTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"call.failed_to_play_voicemail"Tb4b4b4) Tff7b72|| Ta5d6ff"Failed to load voicemail audio"Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3playingVoicemailId Tff7b72= Tff7b72nullTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3audioPlayer Tff7b72= Tff7b72nullTb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;

Tff7b72thisTb4b4b4.Te6edf3audioPlayerTb4b4b4.Te6edf3onended Tff7b72= Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3playingVoicemailId Tff7b72= Tff7b72nullTb4b4b4;
Tb4b4b4}Tb4b4b4;

Tff7b72try Tb4b4b4{
Tff7b72await Tff7b72thisTb4b4b4.Te6edf3audioPlayerTb4b4b4.Te6edf3playTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{
Te6edf3consoleTb4b4b4.Te6edf3errorTb4b4b4(Ta5d6ff"Audio play failed:"Tb4b4b4, Te6edf3eTb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3playingVoicemailId Tff7b72= Tff7b72nullTb4b4b4;
Tb4b4b4}

T8b949e// Mark as read
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3voicemailTb4b4b4.Te6edf3is_readTb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Tff7b72await Tffa657windowTb4b4b4.Te6edf3axiosTb4b4b4.Te6edf3postTb4b4b4(Ta5d6ff`Ta5d6ff/api/v1/telephone/voicemails/Tffd700${Te6edf3voicemailTb4b4b4.Te6edf3idTffd700}Ta5d6ff/readTa5d6ff`Tb4b4b4)Tb4b4b4;
Te6edf3voicemailTb4b4b4.Te6edf3is_read Tff7b72= T79c0ff1Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3unreadVoicemailsCount Tff7b72= Tffa657MathTb4b4b4.Te6edf3maxTb4b4b4(T79c0ff0Tb4b4b4, Tff7b72thisTb4b4b4.Te6edf3unreadVoicemailsCount Tff7b72- T79c0ff1Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{
Te6edf3consoleTb4b4b4.Te6edf3errorTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3deleteVoicemailTb4b4b4(Te6edf3voicemailIdTb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Tff7b72await Tffa657windowTb4b4b4.Te6edf3axiosTb4b4b4.Tff7b72deleteTb4b4b4(Ta5d6ff`Ta5d6ff/api/v1/telephone/voicemails/Tffd700${Te6edf3voicemailIdTffd700}Ta5d6ff`Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3getVoicemailsTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3ToastUtilsTb4b4b4.Te6edf3successTb4b4b4(Ta5d6ff"Voicemail deleted"Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4{
Te6edf3ToastUtilsTb4b4b4.Te6edf3errorTb4b4b4(Ta5d6ff"Failed to delete voicemail"Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3playGreetingTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3isPlayingGreetingTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3audioPlayerTb4b4b4.Te6edf3pauseTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3isPlayingGreeting Tff7b72= Tff7b72falseTb4b4b4;
Tff7b72returnTb4b4b4;
Tb4b4b4}

Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3audioPlayerTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3audioPlayerTb4b4b4.Te6edf3pauseTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}

Tff7b72thisTb4b4b4.Te6edf3isPlayingGreeting Tff7b72= Tff7b72trueTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3audioPlayer Tff7b72= Tff7b72new Te6edf3AudioTb4b4b4(Ta5d6ff"/api/v1/telephone/voicemail/greeting/audio"Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3audioPlayerTb4b4b4.Te6edf3playTb4b4b4(Tb4b4b4)Tb4b4b4.Tff7b72catchTb4b4b4(Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Te6edf3ToastUtilsTb4b4b4.Te6edf3errorTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"call.no_greeting_audio_found"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3isPlayingGreeting Tff7b72= Tff7b72falseTb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3audioPlayerTb4b4b4.Te6edf3onended Tff7b72= Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3isPlayingGreeting Tff7b72= Tff7b72falseTb4b4b4;
Tb4b4b4}Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3callTb4b4b4(Te6edf3identityHashTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3identityHashTb4b4b4) Tb4b4b4{
Te6edf3ToastUtilsTb4b4b4.Te6edf3errorTb4b4b4(Ta5d6ff"Enter an identity to call"Tb4b4b4)Tb4b4b4;
Tff7b72returnTb4b4b4;
Tb4b4b4}
Tff7b72try Tb4b4b4{
Tff7b72await Tffa657windowTb4b4b4.Te6edf3axiosTb4b4b4.Te6edf3getTb4b4b4(Ta5d6ff`Ta5d6ff/api/v1/telephone/call/Tffd700${Te6edf3identityHashTffd700}Ta5d6ff`Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{
Te6edf3ToastUtilsTb4b4b4.Te6edf3errorTb4b4b4(Te6edf3eTb4b4b4.Te6edf3responseTff7b72?Tb4b4b4.Te6edf3dataTff7b72?Tb4b4b4.Te6edf3message Tff7b72|| Ta5d6ff"Failed to initiate call"Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3answerCallTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Tff7b72await Tffa657windowTb4b4b4.Te6edf3axiosTb4b4b4.Te6edf3getTb4b4b4(Ta5d6ff"/api/v1/telephone/answer"Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4{
Te6edf3ToastUtilsTb4b4b4.Te6edf3errorTb4b4b4(Ta5d6ff"Failed to answer call"Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3hangupCallTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3activeCall Tff7b72&& Tff7b72thisTb4b4b4.Te6edf3activeCallTb4b4b4.Te6edf3is_incoming Tff7b72&& Tff7b72thisTb4b4b4.Te6edf3activeCallTb4b4b4.Te6edf3status Tff7b72=== T79c0ff4Tb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3wasDeclined Tff7b72= Tff7b72trueTb4b4b4;
Tb4b4b4}
Tff7b72await Tffa657windowTb4b4b4.Te6edf3axiosTb4b4b4.Te6edf3getTb4b4b4(Ta5d6ff"/api/v1/telephone/hangup"Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4{
Te6edf3ToastUtilsTb4b4b4.Te6edf3errorTb4b4b4(Ta5d6ff"Failed to hangup call"Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3sendToVoicemailTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Tff7b72await Tffa657windowTb4b4b4.Te6edf3axiosTb4b4b4.Te6edf3getTb4b4b4(Ta5d6ff"/api/v1/telephone/send-to-voicemail"Tb4b4b4)Tb4b4b4;
Te6edf3ToastUtilsTb4b4b4.Te6edf3successTb4b4b4(Ta5d6ff"Call sent to voicemail"Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4{
Te6edf3ToastUtilsTb4b4b4.Te6edf3errorTb4b4b4(Ta5d6ff"Failed to send call to voicemail"Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3switchAudioProfileTb4b4b4(Te6edf3audioProfileIdTb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Tff7b72await Tffa657windowTb4b4b4.Te6edf3axiosTb4b4b4.Te6edf3getTb4b4b4(Ta5d6ff`Ta5d6ff/api/v1/telephone/switch-audio-profile/Tffd700${Te6edf3audioProfileIdTffd700}Ta5d6ff`Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4{
Te6edf3ToastUtilsTb4b4b4.Te6edf3errorTb4b4b4(Ta5d6ff"Failed to switch audio profile"Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3toggleMicrophoneTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Tff7b72const Te6edf3endpoint Tff7b72= Tff7b72thisTb4b4b4.Te6edf3isMicMuted
Tff7b72? Ta5d6ff"/api/v1/telephone/unmute-transmit"
Tff7b72: Ta5d6ff"/api/v1/telephone/mute-transmit"Tb4b4b4;
Tff7b72await Tffa657windowTb4b4b4.Te6edf3axiosTb4b4b4.Te6edf3getTb4b4b4(Te6edf3endpointTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3activeCallTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3activeCallTb4b4b4.Te6edf3is_mic_muted Tff7b72= Tff7b72!Tff7b72thisTb4b4b4.Te6edf3isMicMutedTb4b4b4;
Tb4b4b4}
Tb4b4b4} Tff7b72catch Tb4b4b4{
Te6edf3ToastUtilsTb4b4b4.Te6edf3errorTb4b4b4(Ta5d6ff"Failed to toggle microphone"Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3toggleSpeakerTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Tff7b72const Te6edf3endpoint Tff7b72= Tff7b72thisTb4b4b4.Te6edf3isSpeakerMuted
Tff7b72? Ta5d6ff"/api/v1/telephone/unmute-receive"
Tff7b72: Ta5d6ff"/api/v1/telephone/mute-receive"Tb4b4b4;
Tff7b72await Tffa657windowTb4b4b4.Te6edf3axiosTb4b4b4.Te6edf3getTb4b4b4(Te6edf3endpointTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3activeCallTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3activeCallTb4b4b4.Te6edf3is_speaker_muted Tff7b72= Tff7b72!Tff7b72thisTb4b4b4.Te6edf3isSpeakerMutedTb4b4b4;
Tb4b4b4}
Tb4b4b4} Tff7b72catch Tb4b4b4{
Te6edf3ToastUtilsTb4b4b4.Te6edf3errorTb4b4b4(Ta5d6ff"Failed to toggle speaker"Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4;
Tb4b4b4<Tb4b4b4/Tff7b72scriptTb4b4b4>


──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────